创建型模式2-抽象工厂

抽象工厂(abstract factory)

意图

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

问题思考

考虑一个跨平台GUI框架(比如qt),有窗口,菜单,弹窗等基本widget。然而各个系统的创建widget的API肯定是不一样的,GUI框架需要统一创建widget的接口。比如CreateDialog,我们可以在具体实现中根据OS类型,来决定调用CreateWindowsDialog还是CreateMacOSDialog。但由于GUI widget众多,我们不可能在每一个创建widiget的方法中来进行判断。这个时候,就用到了抽象工厂(abstract factory)

适用性

  • 一个系统要独立于它的产品的创建、组合和表示的时候
  • 一个系统要由多个产品系列中的一个来配置的时候
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现的时候。

类图

abstract_factory

实现

class AbstractFactory {
public:
    virtual IProductA *CreateProductA() = 0;

    virtual IProductB *CreateProductB() = 0;
};

class ConcreteFactory1 : public AbstractFactory {
public:
    IProductA *CreateProductA() override {
        return new ProductA1();
    }

    IProductB *CreateProductB() override {
        return new ProductB1();
    }
};

class ConcreteFactory2 : public AbstractFactory{
public:
    IProductA *CreateProductA() override {
        return new ProductA2();
    }

    IProductB *CreateProductB() override {
        return new ProductB2();
    }
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容