C++抽象工厂

意图

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

适用性

  • 一个系统要独立于它的产品的创建、组合和表示时
  • 一个系统要由多个产品族的其中一族来配置时
  • 当要强调一系列相关的产品对象的设计以便进行联合使用时
  • 当提供一个产品类库,而只想显示它们的接口而不是实现时

示意性代码

#include <iostream>
using namespace std;

class AbstractProductA {

};

class AbstractProductB {

};

class ProductA1 : public AbstractProductA {

};

class ProductB1 : public AbstractProductB {

};

class ProductA2 : public AbstractProductA {

};

class ProductB2 : public AbstractProductB {

};

class AbstractFactory {
public:
    virtual AbstractProductA* CreateProductA() = 0;
    virtual AbstractProductB* CreateProductB() = 0;
};

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

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

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

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


class Client {
private:
    AbstractProductA* _AbstractProductA;
    AbstractProductB* _AbstractProductB;

public:
    Client(AbstractFactory* factory) {
        _AbstractProductA = factory->CreateProductA();
        _AbstractProductB = factory->CreateProductB();
    }

    ~Client() {
        delete _AbstractProductA;
        delete _AbstractProductB;
    }
};

int main() {
    AbstractFactory* factory = new ConcreteFactory1();
    Client client(factory);
}
posted @ 2022-07-26 11:28  岁月飞扬  阅读(32)  评论(0编辑  收藏  举报