创建型模式: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负责。

抽象工厂提供了一个创建产品家族的接口。但是如果要扩展相关产品(比如新增一个),就必须改变接口。 也就说产品家族体现在了接口上。 而抽象方法则只需改动具体的抽象方法实现即可,用户代码无需改动,便于解耦。

抽象工厂的方法经常使用工厂方法的方式实现。

因此:

  • 当需要创建产品家族和想让制造的相关产品集合起来,可以使用抽象工厂。
  • 当用户代码需要从实例化具体类中解耦,可以使用工厂方法。

发表评论