第1页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共10页JAVA设计模式之创造型模式创造型模式包括工厂方法、抽象工厂、创造者模式、单态模式、原型模式共5类1、工厂方法定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。适用条件:1)当一个类不知道它所必须创建的对象的类的时候。2)当一个类希望由它的子类来指定它所创建的对象的时候。3)当类将创建对象的职责委托给多个帮助子类中的某一个,并且类希望将哪一个帮助子类是代理者这一信息局部化的时候。参与者:1)Product:定义工厂方法所创建的对象的接口。2)ConcreteProduct:实现Product接口。3)Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。4)ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例。示例:packagezantip.modules;publicclassFactoryMethodTest{publicstaticvoidmain(String[]args){IWorkFactorystudentWorkFactory=newStudentWorkFactory();第2页共10页第1页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共10页studentWorkFactory.getWork().doWork();IWorkFactoryteacherWorkFactory=newTeacherWorkFactory();teacherWorkFactory.getWork().doWork();}}//ProductinterfaceWork{voiddoWork();}//ConcreteProductclassStudentWorkimplementsWork{@OverridepublicvoiddoWork(){System.out.println("学生做作业");}}classTeacherWorkimplementsWork{@OverridepublicvoiddoWork(){System.out.println("老师审批作业");}}//CreatorinterfaceIWorkFactory{WorkgetWork();}//ConcreteCreatorclassStudentWorkFactoryimplementsIWorkFactory{@OverridepublicWorkgetWork(){returnnewStudentWork();}}classTeacherWorkFactoryimplementsIWorkFactory{第3页共10页第2页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共10页@OverridepublicWorkgetWork(){returnnewTeacherWork();}}输出结果:学生做作业老师审批作业2抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用条件:1)一个系统要独立于它的产品的创建、组合和表示时。2)一个系统要由多个产品系列中的一个来配置时。3)当你要强调一系列相关的产品对象的设计以便进行联合使用时。4)当你提供一个产品类库,而只想显示它们的接口而不是实现时。参与者:1)AbstractFactory:声明一个创建抽象产品对象的操作接口。2)ConcreteFactory:实现创建具体产品对象的操作。3)AbstractProduct:为一类产品对象声明一个接口。4)ConcreteProduct:定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。5)Client:仅使用由AbstractFactory和AbstractProduc*类声明的接口。示例:packagezantip.modules;publicclassAbstractFactoryTest{publicstaticvoidmain(String[]args){//clientIAnimalFactoryblackAnimalFactory=newBlackAnimalFactory();ICatblackCat=blackAnimalFactory.createCat();blackCat.eat();IDogblackDog=blackAnimalFactory.createDog();blackDog.eat();IAnimalFactorywhiteAnimalFactory=newWhiteAnimalFactory();ICatwhiteCat=whiteAnimalFactory.createCat();whiteCat.eat();IDogwhiteDog=whiteAnimalFactory.createDog();whiteDog.eat();}}第4页共10页第3页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共10页//abstractfactoryinterfaceIAnimalFactory{ICatcreateCat();IDogcreateDog();}//abstractproductinterfaceICat{voideat();}interfaceIDog{voideat();}//concreteproductclassBlackCatimplementsICat{@Overridepublicvoideat(){System.out.println("theblackcatiseating");}}classWhiteCatimplementsICat{@Overridepublicvoideat(){System.out.println("thewhit...