- 海之寻趣
- Ranler
- 2015-06-29 11:23
- CC BY-NC-SA
创建型模式:Abstract Factory 抽象工厂模式
抽象工厂模式:提供一个接口类,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。
抽象工厂模式就是把多个创建抽象产品(AbstractProductA, AbstractProductB...)的函数放到一个接口类(AbstractFactory)里, 通过继承接口类的具体类(ConcreteFactory)实现创建具体产品(ProductA, ProductB...)的操作。
class AbstractFactory {
public:
virtual AbstractProductA* createProductA() = 0;
virtual AbstractProductB* createProductB() = 0;
};
class ConcreteFactoryA: public AbstractFactory {
public:
virtual AbstractProductA* createProductA();
virtual AbstractProductB* createProductB();
};
class ConcreteFactoryB: public AbstractFactory {
public:
virtual AbstractProductA* createProductA();
virtual AbstractProductB* createProductB();
};
AbstractProductA* ConcreteFactoryA::createProductA(){...}
AbstractProductB* ConcreteFactoryA::createProductB(){...}
AbstractProductA* ConcreteFactoryB::createProductA(){...}
AbstractProductB* ConcreteFactoryB::createProductB(){...}
在定义好抽象产品家族的情况下,用户代码只需针对AbstractFactory的接口来编程,无需关心具体的实例类型。 具体的实例类型由ConcreteFactory负责。
抽象工厂提供了一个创建产品家族的接口。但是如果要扩展相关产品(比如新增一个),就必须改变接口。 也就说产品家族体现在了接口上。 而抽象方法则只需改动具体的抽象方法实现即可,用户代码无需改动,便于解耦。
抽象工厂的方法经常使用工厂方法的方式实现。
因此:
- 当需要创建产品家族和想让制造的相关产品集合起来,可以使用抽象工厂。
- 当用户代码需要从实例化具体类中解耦,可以使用工厂方法。