设计模式总结-AbstractFactory模式_第1页
设计模式总结-AbstractFactory模式_第2页
设计模式总结-AbstractFactory模式_第3页
设计模式总结-AbstractFactory模式_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、DOC可编辑修改 为你整理各种最新最全办公范文 双击可以删除设计模式总结 -Abstract Factory 模式注:文档内容基本上来自于网上,并加上自己的理解而成。 有的觉得网友总结得非常好,就完全照搬下来,供学习之用然而,有的摘抄并没有加上原链接和出处,请谅解。Abstract Factory模式强调的是系列产品的替换,或者 说系列产品的创建。抽像工厂和一般的工厂各有优缺点:对于,普通工厂来说,我们是可以扩展产品的,但是对 于产生产品系列来说非常麻烦,会导致工厂泛滥。对对,抽像工厂来说,对于产生产品系统非常方便,但 对于产生产品品种来说,需要改动的地方比较多。Spring提供了一个简单的解

2、决方案:BeanFactoryAbstract Factory 模式抽象工厂,是简单工厂和工厂方法的升级版。相比这两 个模式,抽象工厂有这更大的灵活性,同时也更加复杂一些。抽象工厂模式的实质是“提供接口,创建一系列相关或 独立的对象,而不指定这些对象的具体类。”1结构理解1. AbstractFactory是抽象工厂类,声明创建产品族的接口。具体工厂创建具体的产品族,可以创建出分属于不 同产品等级的一个产品族中的所有对象。ConcreteFactoryl和ConcreteFactory2分别生产2个不同产品族。举例:手机工厂生产的产品族中,产品有 Linux系统的 手机和 Windows系统的

3、手机。PC工厂生产的产品族中, 产品 有Linux系统的PC和Windows系统的PC (两个产品族:手 机产品族和PC产品族)2. AbstractProductA 和 AbstractProductB 是产品基 类。它们的派生类是同产品等级结构的具的体产品。举例:Linux的具体产品类型包括 Linux手机版和Linux PC版,Windows的具体产品类型包括 Windows手机版和 Windows PC版。产品族和产品等级的关系:从上图可以看出,4个具体工厂,每个产品族有3个不 同类型的产品,可以生产具体产品4*3=12中具体产品。而对于工厂方法模式,生产12中产品,需要有12个工厂。

4、3. 调用者只能看到抽象层次接口。要点1. 抽象工厂应用场景:一个系统要独立于它的产品的创建、组合和表示时。一个系统要多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联 合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时。2. 新增产品复杂。抽象工厂增加产品组件时,需要更改所有工厂的接口。 如增加产品ProductC,则工厂基类和 具体工厂需要增加接口CreateProductC。3.抽象工厂模式与工厂方法模式的区别。a. 重点不同。工厂方法模式强调的是不同的创建者根 据自身需求去生产不同的具体产品,重点是生产具体产品; 而抽象工厂模式则定位为“在不指定

5、实体类别的前提下,提 供了一个可以创建一系列相关或互相依赖之组件的接口”, 重点是创建相关组件。b. 抽象工厂提供了的“相关组件”可以看成是具体的产品,抽象工厂模式的“相关组件”可工厂模式实现。生产的具体产品,可以用工厂方法模式实现,即每一个产品用 一个工厂方法实现。c. 工厂方法模式只有一个抽象产品类,而抽象工厂模 式有多个。工厂方法模式的具体工厂类只能创建一个具体产 品类的实例,而抽象工厂模式可以创建多个。d. 抽象工厂不能直接创建产品,只能创建工厂,即抽 象工厂创建的产品是工厂。虽然它也定义了创建产品的方 法,但需要创建出来的具体的工厂实现,即抽象工厂创建出 的工厂创建产品。e. 工厂方

6、法采用的是类继承机制;而抽象工厂采用的是对象组合机制,专门定义“工厂”对象来负责对象的创建。 对象组合的方式就是把“工厂”对象作为参数传递。应用抽象工厂模式可应用:支持多种数据库的数据库接口访 问层;界面设计各种风格界面等。源码中通过PC工厂和手机工厂和预装的操作系统产品来举例实现模式。源码#include #include using namespace std;/产品 class CLinux public:virtualCLinux ;/产品使用公共接口virtual void Start = 0; ;class CLinuxMobile : public CLinux public:C

7、LinuxMobilecout CreateLinux ;pWindows =pFactory-CreateWindows ;pLinux-Start ;pWindows-Start ;delete pWindows;deletepLinux; ;int main CFactory* pFactory = NULL;/手机工厂。生产手机产品族,种类有Linux和Windows pFactory = new CMobileFactory;Test(pFactory);delete pFactory;coutusing namespace std;DELLDesktopProduct:DELLDesktopProduct coutusing namespace std;IBMDesktopProduct:IBMDesktopProduct coutusing namespace std;DELLNotebookProduct:DELLNotebookProduct coutCreateDesktopProduct;fac-CreateNotebookProduct ;delete fac;fac = new IBMFactory ;f

温馨提示

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

评论

0/150

提交评论