c++实现抽象工厂模式
时间: 2023-10-30 12:01:14 浏览: 114
抽象工厂模式是一种创建型设计模式,它允许客户端通过接口来创建一组相关或依赖对象,而无需指定其具体类。
以下是一个简单的 C++ 实现抽象工厂模式的示例:
首先,我们定义一个抽象基类 `AbstractProductA` 和 `AbstractProductB`,它们分别代表一组相关的产品:
```cpp
class AbstractProductA {
public:
virtual ~AbstractProductA() {}
virtual void operationA() = 0;
};
class AbstractProductB {
public:
virtual ~AbstractProductB() {}
virtual void operationB() = 0;
};
```
然后,我们定义两个具体的产品类 `ConcreteProductA` 和 `ConcreteProductB`,它们实现了 `AbstractProductA` 和 `AbstractProductB` 接口:
```cpp
class ConcreteProductA : public AbstractProductA {
public:
void operationA() override {
std::cout << "ConcreteProductA::operationA()" << std::endl;
}
};
class ConcreteProductB : public AbstractProductB {
public:
void operationB() override {
std::cout << "ConcreteProductB::operationB()" << std::endl;
}
};
```
接下来,我们定义一个抽象工厂类 `AbstractFactory`,它包含两个纯虚函数 `createProductA()` 和 `createProductB()`,用于创建一组相关的产品:
```cpp
class AbstractFactory {
public:
virtual ~AbstractFactory() {}
virtual AbstractProductA* createProductA() = 0;
virtual AbstractProductB* createProductB() = 0;
};
```
最后,我们定义两个具体的工厂类 `ConcreteFactory1` 和 `ConcreteFactory2`,它们分别实现了 `AbstractFactory` 接口,并分别负责创建一组 `ConcreteProductA` 和 `ConcreteProductB`:
```cpp
class ConcreteFactory1 : public AbstractFactory {
public:
AbstractProductA* createProductA() override {
return new ConcreteProductA();
}
AbstractProductB* createProductB() override {
return new ConcreteProductB();
}
};
class ConcreteFactory2 : public AbstractFactory {
public:
AbstractProductA* createProductA() override {
return new ConcreteProductA();
}
AbstractProductB* createProductB() override {
return new ConcreteProductB();
}
};
```
现在,我们可以通过使用 `AbstractFactory` 接口和具体工厂类来创建一组相关的产品了:
```cpp
AbstractFactory* factory = new ConcreteFactory1();
AbstractProductA* productA = factory->createProductA();
AbstractProductB* productB = factory->createProductB();
productA->operationA();
productB->operationB();
delete productA;
delete productB;
delete factory;
```
输出为:
```
ConcreteProductA::operationA()
ConcreteProductB::operationB()
```
阅读全文