深入浅讲解设计模式中的工厂模式.ppt
《深入浅讲解设计模式中的工厂模式.ppt》由会员分享,可在线阅读,更多相关《深入浅讲解设计模式中的工厂模式.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机工程技术学院深入浅出讲解设计模式中的工厂深入浅出讲解设计模式中的工厂模式幻灯片模式幻灯片PPTPPT 本本PPTPPT课件仅供大家学习使用课件仅供大家学习使用 请学习完及时删除处理请学习完及时删除处理 谢谢!谢谢!计算机工程技术学院设计模式之-工厂模式 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道要实例化哪一个类。工厂模式有以下几种形态:n 简单工厂模式:又称静态工厂方法模式。n 工厂方法模式:又称多态性工厂模式。n 抽象工厂模式:又称工具箱模式计算机工程技术学院设计模式之-简单工厂模式追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是
2、MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行。麦当劳和肯德基就是生产鸡翅的Factory。计算机工程技术学院设计模式之-简单工厂模式话说乾隆皇帝酷爱古董文物,大贪官和申当然不会放过这个溜须拍马的好机会,但是苦于他自己不懂文物,也没有时间亲自去收集鉴别,所以干脆私下里成立了一个衙门叫做文物管理局,负责给他收集天下的古董文物。他什么时候想要只需一句话,“来一件XXX”,一件文物就到他手里了。看出点名堂了吧,我们的和中堂要是在现代可是设计模式高手哦。这就是简单工厂模式了。文物管理局就是工厂,青铜器、字画、瓷器都是具体产品,客户端当然是和申了,他不
3、需要亲自创建这些产品,需要的时候给工厂招呼一声就是了,虽然他不懂也没有时间去研究这些产品(当官就是好啊,呵呵)。下面看看代码吧:计算机工程技术学院设计模式之-简单工厂模式-antique-antique:IAntique IAntique 和申和申+main:void+main:voidinterfaceinterface古董古董瓷器瓷器Name:StringName:String水墨画水墨画青铜器青铜器Name:StringName:StringName:StringName:String工厂:文物管理衙门工厂:文物管理衙门+factory:IAntique+factory:IAntique
4、 ExceptionExceptionBadIantiqueExceptionBadIantiqueException+BadIantiqueException+BadIantiqueException计算机工程技术学院设计模式之-简单工厂模式这里有个小问题,和申必须知道衙门里都有些什么文物,如果他要了一件没有的东西就会出错,这对日理万机的和中堂来说可就是个大问题了。另外,如果出现了新种类的古董,文物管理局的内部结构就要重新调整一下,这样可不利于管理呀。不过不要紧,文物管理局由于工作做得好,已经被乾隆皇帝升格了,简单工厂模式也变成了工厂方法模式。具体怎么回事,且听下回分解。计算机工程技术学院设
5、计模式之-简单工厂模式 简单工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。计算机工程技术学院设计模式之-简单工厂模式 有一个农场公司,专门向市场销售各类水果。在这个系统里需要描述下列的水果:n葡萄:Grapen草莓:Strawberryn苹果:Apple 水果与其他的植物有很大的不同,水果最终是可以采摘食用的。那么一个自然的作法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。计算机工程技术学院设计模式之-简单工厂模式InterfaceFruit+grow:void+harvest:void+plant:void+g
6、row:void+grow:void+harvest:void+harvest:void+plant:void+plant:void+grow:void+grow:void+harvest:void+harvest:void+plant:void+plant:void+grow:void+grow:void+harvest:void+harvest:void+plant:voidape+plant:voidapeGrapeGrapeAppleAppleStrawberryStrawberrySeedless:boolenSeedless:boolentreeAge:inttreeAge:int
7、FuitGardener+factory:Fruitclientclient计算机工程技术学院设计模式之-简单工厂模式客户工厂工厂具体产品抽象产品计算机工程技术学院设计模式之-简单工厂模式Creator+factory:ProductConcreteProduct+ConcreteProductInterfaceProduct计算机工程技术学院设计模式之-简单工厂模式 从上图可以看出简单工厂模式的三个角色:n工厂类(Creator)角色:担任这个角色的是工厂方法方法模式的核心,含有与应用紧密相关的商业逻辑.工厂类在客户端的直接调用下创建产品对象,它往往由一个具体JAVA类实现。n抽象产品(Pr
8、oduct)角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个JAVA接口或JAVA抽象类实现。n具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品由一个具体JAVA类实现.计算机工程技术学院设计模式之-简单工厂模式多层次的产品结构在真实的系统中,产品可以形成复杂的等级结构ProductProductProductProductProductProductProductProductProductProductProductProduct计算机工程技术学院设计模式之-简单工厂模式 这个时
9、候,简单工厂模式采取的是以不变应万变的策略,一律使用同一个工厂ProductProductProductProductProductProduct客户客户工厂工厂计算机工程技术学院设计模式之-简单工厂模式 这样做的好处是设计简单,产品类的等级结构不会反映到工厂类中,从而产品类的等级结构的变化也不会影响到工厂类。但这样做的缺点是,增加新的产品必将导致工厂类的修改。计算机工程技术学院设计模式之-简单工厂模式使用JAVA接口或者JAVA抽象类如果模式所生产的具体产品彼此之间如果模式所生产的具体产品彼此之间没有共同的商业逻辑,那么抽象产品没有共同的商业逻辑,那么抽象产品角色可以由一个角色可以由一个JA
10、VAJAVA接口扮演。相反接口扮演。相反如果这些具体的产品类彼此之间确实如果这些具体的产品类彼此之间确实有共同的商业逻辑,那么这些共有的有共同的商业逻辑,那么这些共有的逻辑就应当移到抽象角色里面,这就逻辑就应当移到抽象角色里面,这就意味着抽象角色应当由一个抽象类扮意味着抽象角色应当由一个抽象类扮演。在一个类型的等级结构中,共同演。在一个类型的等级结构中,共同的代码应当尽量向上移动。以达到公的代码应当尽量向上移动。以达到公享的目的。享的目的。抽象类抽象类抽象类抽象类抽象类抽象类具体类具体类具体类具体类具体类具体类代代码码集集中中的的方方向向计算机工程技术学院设计模式之-简单工厂模式 几种变化 抽
11、象产品角色的省略:如果系统仅有一个具体产品角色,那么就可以省略抽象产品角色。工厂工厂具体产品具体产品CreatorCreator+factory:ConcreteProduct+factory:ConcreteProductConcreteProductConcreteProduct+ConcreteProduct+ConcreteProductCreatesCreates计算机工程技术学院设计模式之-简单工厂模式几种变化 工厂角色与抽象角色合并:在有些情况下,工厂角色可以由抽象产品角色扮演。典型的应用就是java,text,DateFormat。抽象产品抽象产品具体产品具体产品创创建建计算机
12、工程技术学院设计模式之-简单工厂模式 几种变化 三个角色全部合并:如果抽象产品角色已经被省略,而工厂角色就可以与具体产品角色合并。具体产品具体产品创创建建ConcreteProductConcreteProduct+ConcreteProduct+ConcreteProduct+factory:ConcreteProduct+factory:ConcreteProduct计算机工程技术学院设计模式之-简单工厂模式简单工厂模式在Java中的应用DataFormatDataFormat与简单工厂模式与简单工厂模式计算机工程技术学院设计模式之-简单工厂模式 女娲抟土造人:风俗通中说:“俗说天地开辟,
13、未有人民。女娲抟黄土为人。”女娲需要用土造出一个个人,这是一个简单的工厂模式的应用。n女娲是一个工厂类,也就是简单工厂模式的核心角色。n具体的一个个人,包括张三、李四等。这些人便是简单工厂模式里面的具体产品角色。n抽象的人便是最早只存在于女娲的头脑里的一个想法,女娲按照这个想法造出的一个一个具体的人便都符合这个抽象的人的定义。换言之,这个抽象的想法规定了所有具体的人类必须具有的接口。计算机工程技术学院设计模式之-简单工厂模式InterfaceInterface人人+吃饭()吃饭()+睡觉()睡觉()+说话()说话()+吃饭()吃饭()+睡觉()睡觉()+说话()说话()张三张三+吃饭()吃饭(
14、)+睡觉()睡觉()+说话()说话()李四李四+抟土造人()抟土造人()女娲女娲计算机工程技术学院设计模式之-简单工厂模式 思考题 请使用简单工厂模式设计一个创建不同几何形状,描图员系统,要求创建不支持的几何图形抛出BadShapeEception异常。请给出源代码,描图员系统怎么使用。计算机工程技术学院设计模式之工厂方法模式 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。计算机工程技术学院设计模式之工厂方法模式 且说和申的文物管理
15、局办得红红火火,得到了乾隆皇帝的好评(请看第一部分),但是仍然有一些美中不足的地方。第一个问题就是:和申每次需要文物,必须清楚地知道衙门里都有哪些文物,还要知道他们的名字,否则是得不到文物的。这点小事对于日理万机的军机大臣来说,实在是不值得的。第二个问题就是:大清律法有一条规定,一个衙门一旦设定并正常运转,其人员编制、机构设置、职责任务等等,都不能轻易变更,除非得到皇帝的特准;但是如果工作需要,大臣们可以设立新的衙门,不需要皇帝批准。而和申的文物管理局每次要处理新种类的文物,就必须对机构人员重新设定一番,这就要向乾隆报批,这可不是什么好事。计算机工程技术学院设计模式之工厂方法模式 题外话:大家
16、可能都很不理解,大清为什么会有这么一条奇怪的律法,且听我慢慢道来。有一天乾隆睡觉的时候做了一个梦,梦里有四个鬼叫做 Gof 什么的,和他交流治国之道,四个鬼就说了,我们这有一条治国方略,照着去做国家就可以强盛,具体内容就是上面的那个规定,用我们现代人的话来说,就是衙门要尽量免于修改,而易于扩展。这就是我国为什么公务员人数总是严重超标的原因呀。计算机工程技术学院设计模式之工厂方法模式 为了应对这两个问题,和申上报乾隆,进行了机构改革,具体内容就是在文物管理局下面设立青铜器司、瓷器司、水墨画司等等等等,这样每次要处理新种类的文物,直接成立一个与之相对应的“XX司”就行了,而已经成立的那些部门不会受
17、到任何影响,第二个问题迎刃而解。至于第一个问题,有事直接找衙门,比记住复杂的古董名称轻松多了。另外,设立了司这一级后,文物管理局就成了机关(抽象化了),不具体干活了。这里:文物管理局就是抽象工厂,青铜器司、瓷器司、水墨画司等等就是具体工厂,下面看看代码是怎么实现的:计算机工程技术学院设计模式之工厂方法模式和申和申+GetAntiques+GetAntiques+main:void+main:voidinterfaceinterface文物管理衙门文物管理衙门+Factory:IAntique+Factory:IAntique 瓷器司瓷器司水墨司水墨司青铜司青铜司+Factory:IAntiqu
18、e+Factory:IAntique+Factory:IAntique+Factory:IAntique+Factory:IAntique+Factory:IAntique InterfaceInterface古董古董瓷器瓷器水墨画水墨画青铜器青铜器name:Stringname:Stringname:Stringname:Stringname:Stringname:String计算机工程技术学院设计模式之工厂方法模式 工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。压注成型演示了这种模式。塑料玩具制造商加工塑料粉,将塑料注入到希望形状的模具中。玩具的类别(车,人物等等)是由模
19、具决定的。计算机工程技术学院设计模式之工厂方法模式 工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。计算机工程技术学院设计模式之工厂方法模式 现在继续考察农场的管理系统。在简单工厂模式里,讨论了支持水果类作物的系统。在那个系统中,有一个全知全能的园丁角色,控制所有作物的种植、生长和收获。现在这个农场的规模变大了,而同时发生的是管理更加专业化了,过去全能人物没有了,每一种农作物都有专门的园丁管理了,形成规模化和专业化生产。计算机工程技术学院设计模式之工厂方法模式I
20、nterfaceFruit+grow:void、+harvest:void、+plant:void+grow:void+harvest:void+plant:voidGrapeSeedless:boolen+grow:void+harvest:void+plant:voidAppletreeAge:int+grow:void+harvest:void+plant:voidapeStrawberry产品角色的等级结构所有的产品角色都属于一个产品的等级结构,在这个等级结构最上面是抽象产品所有的产品角色都属于一个产品的等级结构,在这个等级结构最上面是抽象产品角色角色PproductPproduct。
21、在本系统中,这个角色是由一个。在本系统中,这个角色是由一个JAVAJAVA接口接口FruitFruit实现的。所有具实现的。所有具体产品都必须实现抽象产品体产品都必须实现抽象产品FruitFruit所声明的接口。所声明的接口。计算机工程技术学院设计模式之工厂方法模式InterfaceInterfacefruitGardenefruitGardener r+factory:Fruit+factory:FruitAppleGardener+factory:Fruit+factory:Fruit+factory:FruitStrawberryGardenerStrawberryGardenerGra
22、peGardenerGrapeGardener工厂角色的等级结构工厂角色的等级结构在上图所示的等级结构中,在上图所示的等级结构中,FruitGardenerFruitGardener是所有具体工厂角色的超类。是所有具体工厂角色的超类。在本系统中,这个抽象角色有在本系统中,这个抽象角色有JAVAJAVA接口接口FruitGardenerFruitGardener实现它声明了一实现它声明了一个工厂方法,要求所有的具体工厂角色都实现这个工厂方法。个工厂方法,要求所有的具体工厂角色都实现这个工厂方法。计算机工程技术学院设计模式之工厂方法模式InterfaceInterfacefruitGardenef
23、ruitGardener r+factory:Fruit+factory:FruitAppleGardener+factory:Fruit+factory:Fruit+factory:FruitInterfaceFruit+grow:void、+harvest:void、+plant:void+grow:void+harvest:void+plant:voidGrapeSeedless:boolen+grow:void+harvest:void+plant:voidAppletreeAge:int+grow:void+harvest:void+plant:voidapeStrawberrySt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入 讲解 设计 模式 中的 工厂
限制150内