《第3章工厂方法模式课件.ppt》由会员分享,可在线阅读,更多相关《第3章工厂方法模式课件.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章工厂方法模式第1页,此课件共26页哦简单工厂模式回顾简单工厂模式回顾简简单单工工厂厂:根根据据传传入入的的参参数数,决决定定创创建建哪哪一一个产品类对象个产品类对象所所有有具具体体产产品品对对象象的的创创建建都都放放在在一一个个类类中中,一旦增加新的产品,一旦增加新的产品,工厂类工厂类都要被修改都要被修改简单工厂模式违背单一职责和开放简单工厂模式违背单一职责和开放-关闭原则关闭原则第2页,此课件共26页哦解决思路解决思路变化点在变化点在“对象创建对象创建”根根据据“封封装装变变化化点点”,可可以以对对简简单单工工厂厂中中的的工工厂厂类类做做了了一一个个封封装装(对对象象创创建建封封装装)
2、使使其满足单一职责和开其满足单一职责和开-闭原则闭原则第3页,此课件共26页哦工厂方法模式工厂方法模式建建立立一一个个抽抽象象工工厂厂的的基基类类,给给每每个个产产品品建建立立一一个个工工厂厂,该该工工厂厂继继承承抽抽象象工工厂厂,规规定定每每个个产产品品都都有有特定的工厂来创建特定的工厂来创建第4页,此课件共26页哦工厂和产品是工厂和产品是平行平行的继承层次结构的继承层次结构工厂方法工厂方法-规模扩大,更专业规模扩大,更专业每每一一种种产产品品都都有有专专门门的的大大师师傅傅制制作作有有面面包包师,面条师,米饭师师,面条师,米饭师工厂方法模式工厂方法模式第5页,此课件共26页哦工厂方法类工厂
3、方法类UML图图第6页,此课件共26页哦 工厂方法类图工厂方法类图第7页,此课件共26页哦抽象工厂接口抽象工厂接口(Creator)工工厂厂方方法法模模式式的的核核心心,它它与与应应用用程程序序无无关关。是是具体工厂必须继承的父类或者必须实现的接口具体工厂必须继承的父类或者必须实现的接口 包包含含逻逻辑辑业业务务的的代代码码,由由应应用用程程序序调调用用以以创创建建对对应的具体产品对象应的具体产品对象 具体工厂类具体工厂类(ConreteCreator)第8页,此课件共26页哦抽象产品接口抽象产品接口(Product)具体产品必须继承的父类或必须实现的接口具体产品必须继承的父类或必须实现的接口
4、所创建的对象就是此角色的实例所创建的对象就是此角色的实例具体产品类具体产品类(ConcreteProduct)第9页,此课件共26页哦练习练习:分析图中的关系分析图中的关系第10页,此课件共26页哦抽象工厂角色抽象工厂角色:Creator具体工厂角色具体工厂角色:BulbCreator与与TubeCreator具体产品角色具体产品角色:BulbLight与与TubeLight抽象产品角色抽象产品角色:Light第11页,此课件共26页哦示示例例1第12页,此课件共26页哦publicinterfaceFruitvoidplant();/种植种植voidgrow();/生长生长voidharve
5、st();/收获收获水果产品接口水果产品接口Fruit.java第13页,此课件共26页哦publicclassAppleimplementsFruitprivateinttreeAge;publicvoidplant()System.out.println(Applehasbeenplanted.);publicvoidgrow()System.out.println(Appleisgrowing.);publicvoidharvest()System.out.println(Applehasbeenharvested.);publicintgetTreeAge()returntreeAge
6、;publicvoidsetTreeAge(inttreeAge)this.treeAge=treeAge;具体产品苹果具体产品苹果Apple.java第14页,此课件共26页哦publicclassGrapeimplementsFruitprivatebooleanseedless;/是否有籽是否有籽publicvoidplant()System.out.println(Grapehasbeenplanted.);publicvoidgrow()System.out.println(Grapeisgrowing.);publicvoidharvest()System.out.println(
7、Grapehasbeenharvested.);publicbooleangetSeedless()returnseedless;publicvoidsetSeedless(booleanseedless)this.seedless=seedless;publicstaticvoidlog(Stringmsg)System.out.println(msg);具体产品葡萄具体产品葡萄Grape.java第15页,此课件共26页哦publicclassStrawberryimplementsFruitpublicvoidplant()System.out.println(Strawberryhas
8、beenplanted.);publicvoidgrow()System.out.println(Strawberryisgrowing.);publicvoidharvest()System.out.println(Strawberryhasbeenharvested.);publicstaticvoidlog(Stringmsg)System.out.println(msg);具体产品草莓具体产品草莓Strawberry.java第16页,此课件共26页哦publicinterfaceFruitGardener/*工厂方法工厂方法*return水果水果*/publicFruitfactor
9、y();水果工厂接口水果工厂接口FruitGardener.java第17页,此课件共26页哦publicclassAppleGardenerimplementsFruitGardener/工厂方法工厂方法publicFruitfactory()Fruitf=newApple();System.out.println(“水果工厂水果工厂(AppletGardener)成功创建一个水果:苹果!)成功创建一个水果:苹果!);returnf;苹果工厂苹果工厂AppleGardener.java第18页,此课件共26页哦publicclassGrapeGardenerimplementsFruitGa
10、rdener/工厂方法工厂方法publicFruitfactory()Fruitf=newGrape();System.out.println(“水果工厂水果工厂(GrapeGardener)成功创建一个水果:葡萄!)成功创建一个水果:葡萄!);returnf;葡萄工厂葡萄工厂GrapeGardener.java第19页,此课件共26页哦publicclassStrawberryGardenerimplementsFruitGardenerpublicFruitfactory()Fruitf=newStrawberry();System.out.println(“水果工厂水果工厂(Strawb
11、erryGardener)成功创建一个水果:草莓!)成功创建一个水果:草莓!);returnf;草莓工厂草莓工厂StrawberryGardener.java第20页,此课件共26页哦publicclassTestAppprivateFruitGardenerf1,f2,f3;privateFruitp1,p2,p3;privatevoidtest()/实例化水果工厂实例化水果工厂f1=newAppleGardener();f2=newGrapeGardener();f3=newStrawberryGardener();/从水果工厂生产水果从水果工厂生产水果p1=f1.factory();p2
12、=f2.factory();p3=f3.factory();publicstaticvoidmain(Stringargs)TestApptest=newTestApp();test.test();测试类(客户端)测试类(客户端)TestApp.java第21页,此课件共26页哦示例示例2:“快餐店快餐店”问题问题第22页,此课件共26页哦示例示例3移移动动电电信信运运营营商商,具具有有不不同同的的话话费费套套餐餐形形式,如动感地带,神州行,全球通等。式,如动感地带,神州行,全球通等。不同套餐具有不同收费标准。不同套餐具有不同收费标准。第23页,此课件共26页哦示例示例3第24页,此课件共26
13、页哦优点:优点:工工厂厂可可以以自自主主决决定定创创建建何何种种产产品品对对象象,创创建建细细节节被被隐藏到具体工厂内部隐藏到具体工厂内部添添加加产产品品时时,只只需需增增加加新新的的产产品品类类和和相相应应的的生生产产工工厂,厂,无需修改无需修改原有的产品和生产工厂原有的产品和生产工厂缺点:缺点:添加产品时,给系统会带来添加产品时,给系统会带来额外开销额外开销工厂方法模式优缺点工厂方法模式优缺点第25页,此课件共26页哦工厂方法模式使用环境工厂方法模式使用环境如如果果只只用用一一个个产产品品类类等等级级就就可可以以描描述述所所有有已已有有的产品类的产品类,简单工厂模式简单工厂模式是很好的解决方案是很好的解决方案当当只只用用一一个个产产品品类类等等级级不不足足以以描描述述所所有有的的产产品品类类,包包括括以以后后可可能能要要添添加加的的新新的的产产品品类类时时,就就应应当考虑采用当考虑采用工厂方法模式工厂方法模式。由由于于工工厂厂方方法法模模式式可可以以容容许许多多个个实实的的工工厂厂类类,以以每每一一个个工工厂厂类类负负责责每每一一个个产产品品类类等等级级,因因此此这种模式可以容纳所有的产品等级。这种模式可以容纳所有的产品等级。第26页,此课件共26页哦