AbstractFactory(抽象工厂)
ABSTRACT FACTORY)(抽象工厂)——对象创建型模式提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类
参与者:
l AbstractFactory
声明一个创建抽象产品对象的操作接口
l ConcreteFactory
实现创建具体产品对象的操作,一个ConcreteFactory实例对应同一系列产品的创建
l AbstractProduct
为一类产品对象声明一个接口
l ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口
l Client
仅使用由AbstractFactory和AbstractProduct类声明的接口。
效果:
1) 分离了具体的类
一个工厂封装创建产品对象的责任和过程,它将可以与类的实现分离。客户通过抽象接口操纵实例。
2) 使得易于交换产品系列
一个具体工厂类在一个应用中仅出现一次(初始化时),当需要改变产品系列时代码改动量很少。
3) 有利于产品的一致性
一个应用一次只能使用同一个系列中的的产品,AbstractFactory很容易实现。
4) 缺点:难以扩展抽象工厂以生产新种类的产品。每一种产品对应与工厂的一个接口,增加新种类的产品就需要扩展工厂接口,这将涉及AbstractFactory类及其所有子类的改变。
实现:
1) 将工厂作为单件。一个应用中一般每个产品系列只需一个ConcreteFactory实例,可以运用Singleton模式。
2) AbstractFactory仅声明一个创建产品的接口,真正创建产品是由ConcreteProduct子类实现的。最通常的一个办法是为每一个产品定义一个工厂方法(Factory Method)
3)定义可扩展工厂,AbstractFactory通常为每一种它可以生产的产品定义一个操作,增加新的产品不方便。一种灵活但不安全的设计是给创建对象的操作增加一个参数。那么AbstractFactory只需要一个Make操作和一个指示要创建对象的种类的参数。
0条评论