欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    深入浅讲解设计模式中的工厂模式.ppt

    • 资源ID:70026555       资源大小:535.50KB        全文页数:74页
    • 资源格式: PPT        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    深入浅讲解设计模式中的工厂模式.ppt

    计算机工程技术学院深入浅出讲解设计模式中的工厂深入浅出讲解设计模式中的工厂模式幻灯片模式幻灯片PPTPPT 本本PPTPPT课件仅供大家学习使用课件仅供大家学习使用 请学习完及时删除处理请学习完及时删除处理 谢谢!谢谢!计算机工程技术学院设计模式之-工厂模式 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道要实例化哪一个类。工厂模式有以下几种形态:n 简单工厂模式:又称静态工厂方法模式。n 工厂方法模式:又称多态性工厂模式。n 抽象工厂模式:又称工具箱模式计算机工程技术学院设计模式之-简单工厂模式追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行。麦当劳和肯德基就是生产鸡翅的Factory。计算机工程技术学院设计模式之-简单工厂模式话说乾隆皇帝酷爱古董文物,大贪官和申当然不会放过这个溜须拍马的好机会,但是苦于他自己不懂文物,也没有时间亲自去收集鉴别,所以干脆私下里成立了一个衙门叫做文物管理局,负责给他收集天下的古董文物。他什么时候想要只需一句话,“来一件XXX”,一件文物就到他手里了。看出点名堂了吧,我们的和中堂要是在现代可是设计模式高手哦。这就是简单工厂模式了。文物管理局就是工厂,青铜器、字画、瓷器都是具体产品,客户端当然是和申了,他不需要亲自创建这些产品,需要的时候给工厂招呼一声就是了,虽然他不懂也没有时间去研究这些产品(当官就是好啊,呵呵)。下面看看代码吧:计算机工程技术学院设计模式之-简单工厂模式-antique-antique:IAntique IAntique 和申和申+main:void+main:voidinterfaceinterface古董古董瓷器瓷器Name:StringName:String水墨画水墨画青铜器青铜器Name:StringName:StringName:StringName:String工厂:文物管理衙门工厂:文物管理衙门+factory:IAntique+factory:IAntique ExceptionExceptionBadIantiqueExceptionBadIantiqueException+BadIantiqueException+BadIantiqueException计算机工程技术学院设计模式之-简单工厂模式这里有个小问题,和申必须知道衙门里都有些什么文物,如果他要了一件没有的东西就会出错,这对日理万机的和中堂来说可就是个大问题了。另外,如果出现了新种类的古董,文物管理局的内部结构就要重新调整一下,这样可不利于管理呀。不过不要紧,文物管理局由于工作做得好,已经被乾隆皇帝升格了,简单工厂模式也变成了工厂方法模式。具体怎么回事,且听下回分解。计算机工程技术学院设计模式之-简单工厂模式 简单工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。计算机工程技术学院设计模式之-简单工厂模式 有一个农场公司,专门向市场销售各类水果。在这个系统里需要描述下列的水果:n葡萄:Grapen草莓:Strawberryn苹果:Apple 水果与其他的植物有很大的不同,水果最终是可以采摘食用的。那么一个自然的作法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。计算机工程技术学院设计模式之-简单工厂模式InterfaceFruit+grow:void+harvest:void+plant:void+grow: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:intFuitGardener+factory:Fruitclientclient计算机工程技术学院设计模式之-简单工厂模式客户工厂工厂具体产品抽象产品计算机工程技术学院设计模式之-简单工厂模式Creator+factory:ProductConcreteProduct+ConcreteProductInterfaceProduct计算机工程技术学院设计模式之-简单工厂模式 从上图可以看出简单工厂模式的三个角色:n工厂类(Creator)角色:担任这个角色的是工厂方法方法模式的核心,含有与应用紧密相关的商业逻辑.工厂类在客户端的直接调用下创建产品对象,它往往由一个具体JAVA类实现。n抽象产品(Product)角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个JAVA接口或JAVA抽象类实现。n具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品由一个具体JAVA类实现.计算机工程技术学院设计模式之-简单工厂模式多层次的产品结构在真实的系统中,产品可以形成复杂的等级结构ProductProductProductProductProductProductProductProductProductProductProductProduct计算机工程技术学院设计模式之-简单工厂模式 这个时候,简单工厂模式采取的是以不变应万变的策略,一律使用同一个工厂ProductProductProductProductProductProduct客户客户工厂工厂计算机工程技术学院设计模式之-简单工厂模式 这样做的好处是设计简单,产品类的等级结构不会反映到工厂类中,从而产品类的等级结构的变化也不会影响到工厂类。但这样做的缺点是,增加新的产品必将导致工厂类的修改。计算机工程技术学院设计模式之-简单工厂模式使用JAVA接口或者JAVA抽象类如果模式所生产的具体产品彼此之间如果模式所生产的具体产品彼此之间没有共同的商业逻辑,那么抽象产品没有共同的商业逻辑,那么抽象产品角色可以由一个角色可以由一个JAVAJAVA接口扮演。相反接口扮演。相反如果这些具体的产品类彼此之间确实如果这些具体的产品类彼此之间确实有共同的商业逻辑,那么这些共有的有共同的商业逻辑,那么这些共有的逻辑就应当移到抽象角色里面,这就逻辑就应当移到抽象角色里面,这就意味着抽象角色应当由一个抽象类扮意味着抽象角色应当由一个抽象类扮演。在一个类型的等级结构中,共同演。在一个类型的等级结构中,共同的代码应当尽量向上移动。以达到公的代码应当尽量向上移动。以达到公享的目的。享的目的。抽象类抽象类抽象类抽象类抽象类抽象类具体类具体类具体类具体类具体类具体类代代码码集集中中的的方方向向计算机工程技术学院设计模式之-简单工厂模式 几种变化 抽象产品角色的省略:如果系统仅有一个具体产品角色,那么就可以省略抽象产品角色。工厂工厂具体产品具体产品CreatorCreator+factory:ConcreteProduct+factory:ConcreteProductConcreteProductConcreteProduct+ConcreteProduct+ConcreteProductCreatesCreates计算机工程技术学院设计模式之-简单工厂模式几种变化 工厂角色与抽象角色合并:在有些情况下,工厂角色可以由抽象产品角色扮演。典型的应用就是java,text,DateFormat。抽象产品抽象产品具体产品具体产品创创建建计算机工程技术学院设计模式之-简单工厂模式 几种变化 三个角色全部合并:如果抽象产品角色已经被省略,而工厂角色就可以与具体产品角色合并。具体产品具体产品创创建建ConcreteProductConcreteProduct+ConcreteProduct+ConcreteProduct+factory:ConcreteProduct+factory:ConcreteProduct计算机工程技术学院设计模式之-简单工厂模式简单工厂模式在Java中的应用DataFormatDataFormat与简单工厂模式与简单工厂模式计算机工程技术学院设计模式之-简单工厂模式 女娲抟土造人:风俗通中说:“俗说天地开辟,未有人民。女娲抟黄土为人。”女娲需要用土造出一个个人,这是一个简单的工厂模式的应用。n女娲是一个工厂类,也就是简单工厂模式的核心角色。n具体的一个个人,包括张三、李四等。这些人便是简单工厂模式里面的具体产品角色。n抽象的人便是最早只存在于女娲的头脑里的一个想法,女娲按照这个想法造出的一个一个具体的人便都符合这个抽象的人的定义。换言之,这个抽象的想法规定了所有具体的人类必须具有的接口。计算机工程技术学院设计模式之-简单工厂模式InterfaceInterface人人+吃饭()吃饭()+睡觉()睡觉()+说话()说话()+吃饭()吃饭()+睡觉()睡觉()+说话()说话()张三张三+吃饭()吃饭()+睡觉()睡觉()+说话()说话()李四李四+抟土造人()抟土造人()女娲女娲计算机工程技术学院设计模式之-简单工厂模式 思考题 请使用简单工厂模式设计一个创建不同几何形状,描图员系统,要求创建不支持的几何图形抛出BadShapeEception异常。请给出源代码,描图员系统怎么使用。计算机工程技术学院设计模式之工厂方法模式 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。计算机工程技术学院设计模式之工厂方法模式 且说和申的文物管理局办得红红火火,得到了乾隆皇帝的好评(请看第一部分),但是仍然有一些美中不足的地方。第一个问题就是:和申每次需要文物,必须清楚地知道衙门里都有哪些文物,还要知道他们的名字,否则是得不到文物的。这点小事对于日理万机的军机大臣来说,实在是不值得的。第二个问题就是:大清律法有一条规定,一个衙门一旦设定并正常运转,其人员编制、机构设置、职责任务等等,都不能轻易变更,除非得到皇帝的特准;但是如果工作需要,大臣们可以设立新的衙门,不需要皇帝批准。而和申的文物管理局每次要处理新种类的文物,就必须对机构人员重新设定一番,这就要向乾隆报批,这可不是什么好事。计算机工程技术学院设计模式之工厂方法模式 题外话:大家可能都很不理解,大清为什么会有这么一条奇怪的律法,且听我慢慢道来。有一天乾隆睡觉的时候做了一个梦,梦里有四个鬼叫做 Gof 什么的,和他交流治国之道,四个鬼就说了,我们这有一条治国方略,照着去做国家就可以强盛,具体内容就是上面的那个规定,用我们现代人的话来说,就是衙门要尽量免于修改,而易于扩展。这就是我国为什么公务员人数总是严重超标的原因呀。计算机工程技术学院设计模式之工厂方法模式 为了应对这两个问题,和申上报乾隆,进行了机构改革,具体内容就是在文物管理局下面设立青铜器司、瓷器司、水墨画司等等等等,这样每次要处理新种类的文物,直接成立一个与之相对应的“XX司”就行了,而已经成立的那些部门不会受到任何影响,第二个问题迎刃而解。至于第一个问题,有事直接找衙门,比记住复杂的古董名称轻松多了。另外,设立了司这一级后,文物管理局就成了机关(抽象化了),不具体干活了。这里:文物管理局就是抽象工厂,青铜器司、瓷器司、水墨画司等等就是具体工厂,下面看看代码是怎么实现的:计算机工程技术学院设计模式之工厂方法模式和申和申+GetAntiques+GetAntiques+main:void+main:voidinterfaceinterface文物管理衙门文物管理衙门+Factory:IAntique+Factory:IAntique 瓷器司瓷器司水墨司水墨司青铜司青铜司+Factory:IAntique+Factory:IAntique+Factory:IAntique+Factory:IAntique+Factory:IAntique+Factory:IAntique InterfaceInterface古董古董瓷器瓷器水墨画水墨画青铜器青铜器name:Stringname:Stringname:Stringname:Stringname:Stringname:String计算机工程技术学院设计模式之工厂方法模式 工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。压注成型演示了这种模式。塑料玩具制造商加工塑料粉,将塑料注入到希望形状的模具中。玩具的类别(车,人物等等)是由模具决定的。计算机工程技术学院设计模式之工厂方法模式 工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。计算机工程技术学院设计模式之工厂方法模式 现在继续考察农场的管理系统。在简单工厂模式里,讨论了支持水果类作物的系统。在那个系统中,有一个全知全能的园丁角色,控制所有作物的种植、生长和收获。现在这个农场的规模变大了,而同时发生的是管理更加专业化了,过去全能人物没有了,每一种农作物都有专门的园丁管理了,形成规模化和专业化生产。计算机工程技术学院设计模式之工厂方法模式InterfaceFruit+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。在本系统中,这个角色是由一个。在本系统中,这个角色是由一个JAVAJAVA接口接口FruitFruit实现的。所有具实现的。所有具体产品都必须实现抽象产品体产品都必须实现抽象产品FruitFruit所声明的接口。所声明的接口。计算机工程技术学院设计模式之工厂方法模式InterfaceInterfacefruitGardenefruitGardener r+factory:Fruit+factory:FruitAppleGardener+factory:Fruit+factory:Fruit+factory:FruitStrawberryGardenerStrawberryGardenerGrapeGardenerGrapeGardener工厂角色的等级结构工厂角色的等级结构在上图所示的等级结构中,在上图所示的等级结构中,FruitGardenerFruitGardener是所有具体工厂角色的超类。是所有具体工厂角色的超类。在本系统中,这个抽象角色有在本系统中,这个抽象角色有JAVAJAVA接口接口FruitGardenerFruitGardener实现它声明了一实现它声明了一个工厂方法,要求所有的具体工厂角色都实现这个工厂方法。个工厂方法,要求所有的具体工厂角色都实现这个工厂方法。计算机工程技术学院设计模式之工厂方法模式InterfaceInterfacefruitGardenefruitGardener 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:voidapeStrawberryStrawberryGardenerStrawberryGardenerGrapeGardenerGrapeGardenerC Cr re ea at te es s计算机工程技术学院设计模式之工厂方法模式 平行的等级结构 在一个系统设计中,常常是首先有产品角色,然后有工厂角色。在可以应用工厂方法模式的情况下,一般都会有一个产品的等级结构,有一个(甚至多个)抽象产品和多个具体产品组成。计算机工程技术学院设计模式之工厂方法模式ProductProductProductProductProductProduct计算机工程技术学院设计模式之工厂方法模式 在上面的产品等级结构中,出现了多于一个的抽象产品类以及多于两个的层次。这其实是真实系统中常常出现的情况。当将工厂方法模式应用到这个系统中去的时候,常常采用的一个做法是按照产品等级结构设计一个同结构的工厂等级结构。计算机工程技术学院设计模式之工厂方法模式FactoryfactoryfactoryfactoryFactoryFactory计算机工程技术学院设计模式之工厂方法模式 然后由响应的工厂角色创建相应的产品角色,如图所示,虚线表示创建(依赖)关系。ProductProductProductProductProductProductFactoryfactoryfactoryfactoryFactoryFactory 工厂方法模式并没有限制产品等级结构的层数,一般的书籍中都以两个层次为例,第一层是抽象产品层,第二层是具体产品层。但是在实际系统中,产品常常有更为复杂的层次计算机工程技术学院设计模式之工厂方法模式 工厂方法模式的结构工厂方法模式的结构ClientClient-creator1:Creator-creator1:Creator-creator2:Creator-creator2:Creator-prod1:Product-prod1:Product-prod2:Product-prod2:Product+main:void+main:voidInterfaceInterfaceCreatorCreatorinterFaceProduct+factory:Product+factory:ProductCreatesCreatesConcreteCreator2ConcreteProduct2ConcreteCreator1+factory:Product+factory:Product+factory:ProductConcreteProduct1+ConcreteProduct1+ConcreteProduct2+ConcreteProduct2计算机工程技术学院设计模式之工厂方法模式Java语言中的工厂方法模式的例子URLURL与与URLConnectionURLConnection的应用的应用计算机工程技术学院设计模式之工厂方法模式 女娲举绳造人 风俗通中说:“俗说天地开辟,未有人民女娲抟黄土为人,剧务,力不暇供,乃引绳与恒泥中,举以为人。”女娲:使用一根绳子,在泥水里搅,然后一甩,所有的泥点都变成了人。当然,女娲造出来的人有男女之别,是因为女娲使用的绳子有阴阳之分。女娲使用了工厂方法模式。计算机工程技术学院设计模式之工厂方法模式InterfaceInterface人人+吃饭()吃饭()+睡觉()睡觉()+说话()说话()+吃饭()吃饭()+睡觉()睡觉()+说话()说话()张三男张三男+吃饭()吃饭()+睡觉()睡觉()+说话()说话()李四男李四男+举绳造人()举绳造人()女娲神绳女娲神绳+吃饭()吃饭()+睡觉()睡觉()+说话()说话()王五女王五女+吃饭()吃饭()+睡觉()睡觉()+说话()说话()赵六女赵六女阳绳阳绳阴绳阴绳+举绳造人举绳造人+举绳造人举绳造人计算机工程技术学院设计模式之工厂方法模式实现要点1 Factory Method模式的两种情况:一是Creator类是一个抽象类且它不提供它所声明的工厂方法的实现;二是Creator是一个具体的类且它提供一个工厂方法的缺省实现。2 工厂方法是可以带参数的。3 工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。计算机工程技术学院设计模式之工厂方法模式效果1 用工厂方法在一个类的内部创建对象通常比直接创建对象 更灵活。2 Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。计算机工程技术学院设计模式之工厂方法模式适用性在以下情况下,适用于工厂方法模式:1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。计算机工程技术学院设计模式之工厂方法模式总结 Factory Method模式是设计模式中应用最为广泛的模式,通过上述讲解,相信我们已经对它有了一定的认识。然而我们要明确的是:在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。Factory Method要解决的就是对象的创建时机问题,它提供了一种扩展的策略,很好地符合了开放封闭原则。计算机工程技术学院设计模式之工厂方法模式 思考题 某一个商业软件产品需要支持Sybase和Oracle。这个系统需要这样的一个查询运行器系统,根据客户端的需要,可以随时向Sybase或者Oracle数据库引擎发出查询。请给出这样的一个系统的示意性设计,并且请考虑在设计中使用工厂方法模式是否适合。暂时可以假定所发出的查寻总是同一个SQL语句计算机工程技术学院设计模式之抽象工厂模式 抽象工厂的目的是要提供一个创建一系列相关或相互依赖对象的接口,而不需要指定它们具体的类。这种模式可以在日本汽车制造厂所使用的金属冲压设备中找到。这种冲压设备可以制造汽车车身部件。同样的机械用于冲压不同的车型的右边车门、左边车门、右前挡泥板、左前挡泥板和引擎罩等等。通过使用转轮来改变冲压盘,这个机械产生的具体类可以在三分钟内改变。计算机工程技术学院设计模式之抽象工厂模式计算机工程技术学院设计模式之抽象工厂模式 抽象工厂模式的起源或者说最早的应用,是用于创建属于不同操作系统的视窗构件。比如,Button和Text都是视窗构件,在UNIX和windows下,它们的本地实现是不同的,细节也不相同。ButtonButtonTextText UnixButtonUnixButtonWindowsWindowsUnixTextUnixTextWindowsTextWindowsText计算机工程技术学院设计模式之抽象工厂模式产品等级结构产品等级结构产品族产品族ButtonButtonTextTextUnixUnixWindowsWindowsUnixButtonUnixButtonUnixTextUnixTextWinButtonWinButtonWinTextWinTextUnixUnix产品族产品族WindowsWindows产品族产品族计算机工程技术学院设计模式之抽象工厂模式AbstractFactoryAbstractFactoryUnixFactoryUnixFactoryWinFactoryWinFactoryButtonButtonUnixButtonUnixButtonWinButtonWinButtonTextTextUnixTextUnixTextWinTextWinText计算机工程技术学院设计模式之抽象工厂模式 在前面我们仔细讨论了一个农场从小到大的发展过程。而如今,农场公司再次面临新的大发展,一项重要的工作就是引进雕料大棚技术,在大棚里种植热带(Tropical)和亚热带的水果和蔬菜。可以看出,在这个系统中,产品分成了两个等级结构:水果(Fruit)和蔬菜(Veggie)。两个产品族Tropical和Northen。计算机工程技术学院设计模式之抽象工厂模式产品等级结构产品等级结构产品族产品族FruitFruitVeggieVeggieTropicalTropicalNorthenNorthenTropcalFruitTropcalFruitTropicalVeggieTropicalVeggieNorthemFruitNorthemFruitNorthemVeggieNorthemVeggieTropicalTropical产品族产品族NorthenNorthen产品族产品族计算机工程技术学院设计模式之抽象工厂模式interFaceinterFaceFruitFruitTropicalFruit+TropicalFruitName:StringNorthernFruit+NorthernFruitName:String计算机工程技术学院设计模式之抽象工厂模式interFaceinterFaceVeggieVeggieTropicalVeggieTropicalVeggie+TropicalVeggie+TropicalVeggieName:StringName:StringNorthernVeggie+NorthernVeggieName:String计算机工程技术学院设计模式之抽象工厂模式InterfaceInterfaceGardenerGardenerTtopicalGardenerTtopicalGardenerNorthenGardenerNorthenGardener计算机工程技术学院设计模式之抽象工厂模式InterfaceInterfaceGardenerGardenerInterfaceFruitTropicalGardener+createFruit:Fruit+createVeggie:VeggieNorthenGardener+createFruit:Fruit+createVeggie:VeggieTropicalFruit+TropicalFruitName:StringNorthernFruit+NorthernFruitName:StringInterfaceVeggieTropicalVeggle+TropicalVeggleName:StringNorthernVeggle+NorthernVeggleName:String计算机工程技术学院设计模式之抽象工厂模式 练习:设计一个微型计算机配件的生产。这个系统所需要的产品族有两个,一个系列是IBM或兼容:另一个是MAC,产品等级结构也有两个,一个是RAM,另一个是CPU。计算机工程技术学院设计模式之抽象工厂模式产品等级结构产品等级结构产品族产品族RAMRAMCPUCPUIBMIBMMACMACPCRAMPCRAMPCCPUPCCPUMACRAMMACRAMMACCPUMACCPUUnixUnix产品族产品族WindowsWindows产品族产品族计算机工程技术学院设计模式之抽象工厂模式InterfaceInterfaceComputerProducerComputerProducerInterfaceRamIBMProducer+createCpu:Cpu+createRam:RamMacProducer+createCpu:Cpu+createRam:RamIBMRam+IBMRamName:StringMacRam+MacRamName:StringInterfaceCpuIBMCpu+IBMCpuName:StringMacCpu+MacCpuName:String计算机工程技术学院设计模式之抽象工厂模式InterfaceCreatorInterfaceProductAConcreteCreator1+factoryA:ProductA+factoryB:ProductBConcreteCreator2+factoryA:ProductA+factoryB:ProductBProductA1+ProductA1ProductA2+ProductA2InterfaceProductBProductB1+ProductB1ProductB2+ProductB2+facoryA:ProductA+factory:ProductB计算机工程技术学院设计模式之抽象工厂模式 女娲造万物 女娲不仅仅造了人,而且造了世间万物这也包括动物。因此。女娲一定是把举绳造人的方法推广到了创造各种动物身上。可以想到,女娲把绳子搅到泥水里,然后把沾满泥水的绳子凭空一甩,甩出的泥点,像人的变成人,其他变成了动物。并且分出男女、雌雄。计算机工程技术学院设计模式之抽象工厂模式产品等级结构产品等级结构产品族产品族人人兽兽阴阴阳阳女人女人雌兽雌兽男人男人雄兽雄兽阴产品族阴产品族阳产品族阳产品族计算机工程技术学院设计模式之-简单工厂模式Interface人人+吃饭()吃饭()+睡觉()睡觉()+说话()说话()+吃饭()吃饭()+睡觉()睡觉()+说话()说话()亚当亚当+吃饭()吃饭()+睡觉()睡觉()+说话()说话()夏娃夏娃+举绳造人()举绳造人()女娲神绳女娲神绳+觅食()觅食()+睡觉()睡觉()+叫唤()叫唤()公牛公牛+觅食()觅食()+睡觉()睡觉()+叫唤()叫唤()母马母马阳绳阳绳阴绳阴绳+举绳造物举绳造物+举绳造物举绳造物Interface兽兽+觅食()觅食()+睡觉()睡觉()+叫唤()叫唤()计算机工程技术学院设计模式之抽象工厂模式实现要点n抽象工厂将产品对象的创建延迟到它的具体工厂的子类。n如果没有应对“多系列对象创建”的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的静态工厂完全可以。系列对象指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。n抽象工厂模式经常和工厂方法模式共同组合来应对“对象创建”的需求变化。计算机工程技术学院设计模式之抽象工厂模式n通常在运行时刻创建一个具体工厂类的实例,这一具体工厂的创建具有特定实现的产品对象,为创建不同的产品对象,客户应使用不同的具体工厂。n把工厂作为单件,一个应用中一般每个产品系列只需一个具体工厂的实例,因此,工厂通常最好实现为一个单件模式。创建产品,抽象工厂仅声明一个创建产品的接口,真正创建产品是由具体产品类创建的,最通常的一个办法是为每一个产品定义一个工厂方法,一个具体的工厂将为每个产品重定义该工厂方法以指定产品,虽然这样的实现很简单,但它确要求每个产品系列都要有一个新的具体工厂子类,即使这些产品系列的差别很小。计算机工程技术学院设计模式之抽象工厂模式 优点n分离了具体的类。抽象工厂模式帮助你控制一个应用创建的对象的类,因为一个工厂封装创建产品对象的责任和过程。它将客户和类的实现分离,客户通过他们的抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户代码中。n它使得易于交换产品系列。一个具体工厂类在一个应用中仅出现一次即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。n它有利于产品的一致性。当一个系列的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要,而抽象工厂很容易实现这一点。计算机工程技术学院设计模式之抽象工厂模式缺点 难以支持新种类的产品。难以扩展抽象工厂以生产新种类的产品。这是因为抽象工厂几口确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。计算机工程技术学院设计模式之抽象工厂模式适用性n在以下情况下应当考虑使用抽象工厂模式:n一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。n这个系统有多于一个的产品族,而系统只消费其中某一产品族。n同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。n系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。计算机工程技术学院设计模式之抽象工厂模式应用场景n支持多种观感标准的用户界面工具箱(Kit)。n游戏开发中的多风格系列场景,比如道路,房屋,管道等。n计算机工程技术学院设计模式之抽象工厂模式总结 总之,抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,运用抽象工厂模式的关键点在于应对“多系列对象创建”的需求变化。一句话,学会了抽象工厂模式,你将理解OOP的精华:面向接口编程。计算机工程技术学院

    注意事项

    本文(深入浅讲解设计模式中的工厂模式.ppt)为本站会员(暗伤)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开