设计模式(一): abstract factory抽象工厂模式 -- 创建型模式

1.定义

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

  

2.适用场景

1.一个系统要独立于它的产品创建、组合和表示。
2.一个系统要由多个产品系列中的一个来配置。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现。

  

3.评价

1.它分离了具体的类
2.它使得易于交换产品系列
3.它有利于产品的一致性
4.难以支持新种类的产品
5."开放-封闭"原则要求系统对扩展开放,对修改封闭。通过扩展达到增强其功能的目的。对于涉及到多个产品族与多个产品等级结构的系统,其功能增强包括两方面:
  增加产品族:Abstract Factory很好的支持了"开放-封闭"原则。
  增加新产品的等级结构:需要修改所有的工厂角色,没有很好支持"开放-封闭"原则。
  综合起来,抽象工厂模式以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便,而不能为新的产品等级结构的增加提供这样的方便。

  

为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图:

图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。

4. 模式结构

1.抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
2.具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
3.抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
4.具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。

所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:

5.案例说明

(1)

在抽象工厂模式中,每个ConcreteCreator只生产一种具体的产品,好似宝马的生产车间,只生产宝马汽车,而不会生产奔驰汽车,同样的奔驰的生产车间也只能生产奔驰汽车而不会生产宝马汽车,这里宝马和奔驰的生产车间都用相同的构造模式,即他们都是继承实现了Creator,对于product来说,我只是知道需要一辆奔驰,但是并不关心这辆车在哪个车间生产的。Factory Pattern跟Abstract Factory Pattern的区别可以用宝马和奔驰两个生产工厂来比对。 在Factory Pattern里面,用户只要我要求从奔驰车间还是宝马车间里提供一个产品,也就是说产品的种类已经在用户那里指定了。在Abstract Factory Pattern里面,用户不会去指定我要的产品是从宝马还是奔驰的车间里出来。

(2)

6.代码举例

  文献[5]中代码较为详细。

7.参考

  [1]Gof:设计模式。

  [2]百度百科:http://baike.baidu.com/view/1580269.htm。

  [3]http://www.360doc.com/content/11/1013/15/7909375_155752540.shtml。

  [4]http://blog.csdn.net/sanmaofly/article/details/5085108。

  [5]http://wuhongyu.iteye.com/blog/2024092。

设计模式(一): abstract factory抽象工厂模式 -- 创建型模式

时间: 2024-10-13 05:32:50

设计模式(一): abstract factory抽象工厂模式 -- 创建型模式的相关文章

跟着实例学习设计模式(4)-抽象工厂(创建型)

抽象工厂属于创建型设计模式 设计意图:提供一个接口.能够创建一系列相关或相互依赖的对象,而无须指定它们详细的类. 光看设计意图有些抽象,不好理解.让我们来看一下实例类图,结合类图我们再做详细的解释,相信会让大家豁然开朗的.我们以生产汽车为例,我们生产的汽车分两个系列,小车.卡车,每一个系列汽车都有发动机和油箱. 上图: IAbstrcatFactory:抽象工厂接口,声明创建抽象产品的方法. CarFactory:小车工厂实现类. TrunkFactory:卡车工厂实现类. 这里我们为每一个系列

Java设计模式:Abstract Factory(抽象工厂)模式

概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品),而系统只消费其中某一族的产品.换句话说,抽象工厂创建一整套具有相互依赖或作用关系的产品(至少两个产品),而工厂方法中的工厂只能创建单一系列的产品. 应用场景 客户端不需要知道它所创建的对象的类. 需要一组对象共同完成某种功能时,并且可能存在多组对象完成不同功能的情况. 系统结构稳定,不会频繁地增加

设计模式(三): FACTORY工厂模式 -- 创建型模式

1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 2.适用场景 1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来.Java Collection中的iterator() 方法即属于这种情况. 2.第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给

设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式

1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用.后来出现工业革命.用户不用去创建宝马车.因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建.比如想要320i系列车.工厂就创建这个系列的车.即工厂可以创建产品. 3.评价 优点: 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体

设计模式(五):PROTOTYPE原型模式 -- 创建型模式

1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对象的副本,这种创建对象的方式,相比我们之前说的几类创建型模式还是有区别的,之前的讲述的工厂模式与抽象工厂都是通过工厂封装具体的new操作的过程,返回一个新的对象,有的时候我们通过这样的创建工厂创建对象不值得,特别是以下的几个场景的时候,可能使用原型模式更简单也效率更高. • 1)当一个系统应该独立于

设计模式(二): BUILDER生成器模式 -- 创建型模式

1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2. 当构造过程必须允许被构造的对象有不同表示时. 3.评价 1. 它使你可以改变一个产品的内部表示. Builder对象提供给导向器一个构造产品的抽象接口.该接口使得生成器可以隐藏这个产品的表示和内部结构.它同时也隐藏了该产品是如何装配的.因为产品是通过抽象接口构造的,你在改变该产品的内部表

设计模式(六):Singleton 单件模式 -- 创建型模式

1.定义 当需要控制一个类的实例数量且调用者可以从一个公共的访问点访问时. 2.适用场景 1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 2. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 3.评价 优点: 1. 对唯一实例的受控访问, 因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它. 2. 缩小名空间,Singleton模式是对全局变量的一种改进.它避免了那些存储唯一实例的全局变量污染名空

Java开发中的23种设计模式详解之一:5种创建型模式

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 1.开闭原则(Open Clo

c++ 设计模式9 (Abstract Factory 抽象工厂模式)

5.2 抽象工厂模式 动机:在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 代码示例: 实现利用数据库的业务逻辑,支持多数据库(Sql,Oracle等),有连接.命令.读取等功能. 其中命令,连接功能之间有相互联系. 方法一(使用工厂方法): 每个功能类有一个创建的工厂,如IDBConnection与IDBConnectionFactory 1 //数据库访问有关的基类 2 class IDBConnection{ 3