大话设计模式--读书笔记6抽象工厂模式

抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类。又称为kit模式,属于对象创建模型。

结构图:

大话设计模式--读书笔记6抽象工厂模式

抽象工厂 AbstractFactory :工厂方法模式的核心,与产品逻辑上无关

具体工厂 ConcreteFactory : 直接在客户端调用下创建产品的实例,它具有选择合适产品对象的逻辑,与系统生产产品业务逻辑紧密相关

抽象产品 Abstract Product :工厂方法模式所创建的对象父类,或者是与创建对象所共同拥有的接口。

具体产品 Concrete Product :抽象工厂模式所创建的任何产品对象都是某一具体产品类的实例。是系统生产的最终结果。

使用时机:系统的产品有多于一个的产品族,系统只使用某一族的产品。

优点:

  • 抽象工厂隔离了产品的生产,消费者无需知道什么被生产。所以更换一个具体的工厂相对容易。所有的具体工厂都实现了抽象工厂中的公共接口,只需改变工厂的实例,就可以改变整个软件系统的行为。实现了高内聚低耦合设计目的
  • 产品族中多个对象一起工作,可以保证消费者始终只使用一个产品族中的对象。
  • 增加新的具体工厂和产品族非常方便,无需修改已有系统。符合“开闭原则”。

缺点:

  • 添加新的产品对象,对扩展工厂来生产新种类的产品比较困难。抽象工厂规定了所有可能被创建的产品集合,当需要新的类型产品,意味着需要对接口进行拓展,并进一步需要对抽象工厂角色和所有子类的修改。开发困难。
  • 开闭原则倾斜(产品和产品族新增容易,产品等级结构增加比较困难)

开闭原则:要求系统对拓展开放,对修改封闭,通过拓展达到增强其功能的目的

书里的代码结果如下:

大话设计模式--读书笔记6抽象工厂模式

代码地址:

https://github.com/FastStonewkx/hometown/

atom这个软件对于脚本语言使用的学习很有效率。我后面试试用一下。

后面会有三种工厂模型的比较:
简单工厂模型
工厂方法模型
抽象工厂模型

参考:
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/abstract_factory.html#id11

http://www.runoob.com/design-pattern/abstract-factory-pattern.html