抽象工厂模式——学习笔记

来源:互联网 发布:foxtable软件 编辑:程序博客网 时间:2024/05/18 02:14

1.抽象工厂模式——是对产品角色的抽象,面对的问题是多个产品等级结构的系统设计,这是与工厂方法模式最大的区别(工厂方法模式面对的是一个产品等级结构),如果使用多个工厂方法模式来实现,会导致相似的工厂方法的数目越来越多。

2.要创建一个具体产品对象,需先指明产品等级结构(一个产品系列button,textview,imageview等)和产品族(通常为系统环境因素),有几个产品族,就有几个具体工厂,每一个具体工厂负责创建同一个产品族,不同产品等级结构的产品。有多少个产品等级结构,工厂类里就有多少个工厂方法。

3.适应场合:

(1)使用产品的客户端不应当依赖于具体产品是如何创建的这些细节,对所有的工厂方法都是这样的。

(2)有多个系列(产品族)的产品(产品等级结构)被使用。

图中实例为Unix产品族和Windows产品族,Button、Text两个产品等级结构,UnixFactory负责创建Unix系统下的控件,WindowsFactory负责创建Windows下的控件。

“开-闭”原则分析:(对扩展开放,对修改关闭)

对抽象工厂系统的扩展可以:

(1)添加新的产品族; 即添加新的具体工厂 类,不需要修改原有代码;

(2)添加新的产品等级结构;即要添加新的工厂方法,要所有原有的具体工厂类都添加一个工厂方法,违背了“开-闭”原则。

相关模式:

(1)如果只需要一个具体工厂的实例可以使用单例模式。

(2)抽象工厂与具体工厂可以合并,返回具体的工厂。

 

原创粉丝点击