工厂三兄弟之抽象工厂模式(三)

转载 2013年12月05日 20:12:04

文章转载:http://blog.csdn.net/lovelion/article/details/9319423


3 抽象工厂模式概述

       抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:

       抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。

       在抽象工厂模式中,每一个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构成了一个产品族,抽象工厂模式结构如图5所示:

5  抽象工厂模式结构图

       在抽象工厂模式结构图中包含如下几个角色:

       ● AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。

       ● ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。

       ● AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。

        ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。

       在抽象工厂中声明了多个工厂方法,用于创建不同类型的产品,抽象工厂可以是接口,也可以是抽象类或者具体类,其典型代码如下所示:

[java] view plaincopy
  1. abstract class AbstractFactory {  
  2. public abstract AbstractProductA createProductA(); //工厂方法一  
  3. public abstract AbstractProductB createProductB(); //工厂方法二  
  4. ……  
  5. }  

       具体工厂实现了抽象工厂,每一个具体的工厂方法可以返回一个特定的产品对象,而同一个具体工厂所创建的产品对象构成了一个产品族。对于每一个具体工厂类,其典型代码如下所示:

[java] view plaincopy
  1. class ConcreteFactory1 extends AbstractFactory {  
  2.     //工厂方法一  
  3. public AbstractProductA createProductA() {  
  4.     return new ConcreteProductA1();  
  5. }  
  6.   
  7. //工厂方法二  
  8. public AbstractProductB createProductB() {  
  9.     return new ConcreteProductB1();  
  10. }  
  11.   
  12. ……  
  13. }  

       与工厂方法模式一样,抽象工厂模式也可为每一种产品提供一组重载的工厂方法,以不同的方式对产品对象进行创建。

疑问

思考

       抽象工厂模式是否符合“开闭原则”?【从增加新的产品等级结构和增加新的产品族两方面进行思考。】

 

【作者:刘伟 http://blog.csdn.net/lovelion


相关文章推荐

【怎样写代码】工厂三兄弟之抽象工厂模式(六):扩展案例II

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest...

工厂三兄弟之抽象工厂模式

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一...

工厂三兄弟之抽象工厂模式(四)

4 完整解决方案       Sunny公司开发人员使用抽象工厂模式来重构界面皮肤库的设计,其基本结构如图6所示:图6 界面皮肤库结构图       在图6中,SkinFactory接口充当抽象工厂,...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:47
  • 13399

工厂三兄弟之抽象工厂模式

抽象工厂模式概述 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下: ...

工厂三兄弟之抽象工厂模式(五)

5 “开闭原则”的倾斜性       Sunny公司使用抽象工厂模式设计了界面皮肤库,该皮肤库可以较为方便地增加新的皮肤,但是现在遇到一个非常严重的问题:由于设计时考虑不全面,忘记为单选按钮(Radi...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:58
  • 11261

工厂三兄弟之抽象工厂模式(一):界面皮肤库的初始设计

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一...
  • will130
  • will130
  • 2016年01月04日 20:10
  • 227

工厂三兄弟之抽象工厂模式(三)

3 抽象工厂模式概述       抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:       ...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:40
  • 13620

工厂三兄弟之抽象工厂模式(一)

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:17
  • 15798

工厂三兄弟——抽象工厂模式

什么是抽象工厂模式抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:抽象工厂模式(Abstract...
  • Todo_
  • Todo_
  • 2016年02月17日 14:51
  • 431

【怎样写代码】工厂三兄弟之抽象工厂模式(二):解决方案

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂三兄弟之抽象工厂模式(三)
举报原因:
原因补充:

(最多只允许输入30个字)