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);
}