抽象工厂模式.ppt_第1页
抽象工厂模式.ppt_第2页
抽象工厂模式.ppt_第3页
抽象工厂模式.ppt_第4页
抽象工厂模式.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件设计模式,第二讲抽象工厂模式,抽象工厂模式,名称:抽象工厂模式(AbstractFactoryPattern)或Kit模式意图:提供一系列相关或相互依赖对象的接口而无需指定他们具体的类。核心:抽象工厂模式(AbstractFactoryPattern)提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类。抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品。,抽象工厂模式,抽象工厂模式的动机,考虑一个支持多种视感(look-and-feel)表准的用户界面工具包,例如Motif和PresentationManager.不同的视感风格为滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组建。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。,抽象工厂模式的动机,为解决这一问题,定义一个抽象的WidgetFactory类,这个类声明了一个用来创建每一个类基本窗口组件的接口.每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格。对于一个抽象窗口组件类,WidgetFactory接口都有一个返回新窗口组件对象的操作。客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就不依赖于一般的视感风格。,抽象工厂模式的作用,抽象工厂模式的类图,抽象工厂模式的类图,抽象工厂模式的时序图,抽象工厂模式的实例一,抽象工厂模式的实例二,大陆生态系统:已知动物世界中各个大陆的动物是不同的,例如非洲有狮子和角马,美洲有狼和野牛。动物可划分为食草和食肉动物,狮子和美洲狼属于食肉动物,而野牛和角马属于食草动物。狮子捕食角马,美洲狼捕食野牛。,抽象工厂模式的实例二,抽象工厂模式的实例三,电脑生产:IBM,Dell都是著名的计算机生产厂家,他们采用的主板、硬盘和CPU是不同的,但主板、硬盘和CPU之间一定要兼容。现硬盘有Maxtor和WestDigit两种,CPU有AMD和Intel,主板有MSI865PE和MSIK7N2G两种。IBM采用Intel的CPU和WestDigit的硬盘,Dell采用AMD的CPU和Maxtor的硬盘。,抽象工厂模式的实例三,抽象工厂模式的实例三,抽象工厂模式的实例三,抽象工厂模式的实例三,抽象工厂模式的实例三,抽象工厂模式的实例三,抽象工厂模式的实例三,抽象工厂模式的实例四,综合案例(肯德基):故事中的角色肯德基店生产食物的工厂食物(麻辣鸡腿汉堡、奥尔良烤鸡翅、薯条、可乐)工厂生产的产品爸爸、儿子客户,抽象工厂模式的实例四,综合案例(肯德基):抽象化分析“开-闭”原则-抽象抽象最大话-“依赖倒置”,抽象工厂模式的实例四,抽象工厂模式的实例四,packagecom.demo.factory.model;/*食品基类*/publicabstractclassAbstractBaseFood/类别protectedStringkind;/数量protectedintnum;/价格protectedfloatprice;/合计publicfloattotalPrice()returnthis.num*this.price;,抽象工厂模式的实例四,packagecom.demo.factory.model;/*抽象食物接口*/publicinterfaceIFood/*打印输出食物信息*/voidprintMesage();,抽象工厂模式的实例四,packagecom.demo.factory.model;/*汉堡类*/publicabstractclassHamburgextendsAbstractBaseFoodimplementsIFoodpublicvoidprintMesage()System.out.println(-+this.kind+风味汉堡,t单价:+this.price+t数量:+this.num+,t合计:+this.totalPrice();,抽象工厂模式的实例四,packagecom.demo.factory.model.kfc;importcom.demo.factory.model.Hamburg;/*中国风味的麻辣鸡腿汉堡*/publicclassChinaHanburmextendsHamburg/*构造方法*paramkind*paramprice*paramnum*/publicChinaHanburm(intnum)this.kind=麻辣;this.price=14.0f;this.num=num;,抽象工厂模式的实例四,packagecom.demo.factory.itf;importcom.demo.factory.model.Beverage;importcom.demo.factory.model.ChickenWings;importcom.demo.factory.model.FrenchFries;importcom.demo.factory.model.Hamburg;/*肯德基抽象工厂*/publicinterfaceIKfcFactory/生产汉堡publicHamburgcreateHamburg(intnum);/生产薯条publicFrenchFriescreateFrenchFries(intnum);/生产鸡翅publicChickenWingscreateChickenWings(intnum);/生产饮料publicBeveragecreateBeverage(intnum);,抽象工厂模式的实例四,packagecom.demo.factory.itf;importcom.demo.factory.model.Beverage;importcom.demo.factory.model.ChickenWings;publicclassChinaKfcFactoryimplementsIKfcFactory/生产可乐publicBeveragecreateBeverage(intnum)returnnewChinaBeverage(num);/生产奥尔良烤鸡翅publicChickenWingscreateChickenWings(intnum)returnnewChinaChickenWings(num);/成产薯条publicFrenchFriescreateFrenchFries(intnum)returnnewChinaFrenchFries(num);/生产麻辣鸡腿汉堡publicHamburgcreateHamburg(intnum)returnnewChinaHanburm(num);,抽象工厂模式的实例四,/*客户类*/publicclassCustomer/抽象工厂privateIKfcFactorykfcFactory;/构造方法将抽象工厂作为参数传入publicCustomer(IKfcFactorykfcFactory)this.kfcFactory=kfcFactory;/*订购食物*/订购鸡腿汉堡publicfloatorderHamburg(intnum)/获得麻辣鸡腿汉堡Hamburghamburg=kfcFactory.createHamburg(num);/输出订购信息hamburg.printMesage();/返回总价returnhamburg.totalPrice();,抽象工厂模式的实例四,publicclassMainApp/*主应用程序方法*/publicstaticvoidmain(Stringargs)/*定义一个肯德基工厂IKfcFactory*/IKfcFactorykfcFactory=newChinaKfcFactory();/*用户进入肯德基开始点餐*/Customercustomer=newCustomer(kfcFactory);,抽象工厂模式的实例四,/*开始点餐*/一个麻辣鸡腿汉堡floathamhurgMoney=customer.orderHamburg(1);/四个新奥尔良烤鸡翅floatchickenWingsMoney=customer.orderChickenWings(4);/一包薯条floatfrenchFriesMoney=customer.orderFrenchFries(1);/两杯可乐floatbeverageMoney=customer.orderBeverage(2);System.out.println(总计:+(hamhurgMoney+chickenWingsMoney+frenchFriesMoney+beverageMoney);,抽象工厂模式的实例四,1多用对象组合,少用继承2针对抽象编程,不针对实现编程3产品对象通过工厂暴露的方法创建,抽象工厂模式和工厂模式的区别,工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具体产品,而抽象工厂模式用来创建一个产品家族的抽象类类型。,抽象工厂模式的优势与缺陷,优势:隔离了具体类的生成,使得客户不知道什么被创建了,因此更换一个具体工厂变得相对容易。优势:当一个产品族中多个对象被设计成一起工作时,抽象工厂保证客户端只是用同一产品族中的对象。缺陷:添加新的产品对象时,难以扩展抽象工厂以产生新种类的产品,因为AbstractFactory规定了所有可能被创建的产品集合,从而涉及到对AbstractFactory及其所有子类的修改。,抽象工厂模式的优势与缺陷,优势:隔离了具体类的生成,使得客户不知道什么被创建了,因此更换一个具体工厂变得相对容易。优势:当一个产品族中多个对象被设计成一起工作时,抽象工厂保证客户端只是用同一产品族中的对象。缺陷:添加新的产品对象时,难以扩展抽象工厂以产生新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论