C++实现一个抽象工厂模式
时间: 2023-10-27 10:10:25 浏览: 93
C++设计模式之抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一个接口来创建一系列相关或相互依赖的对象,而无需指定它们的具体类。下面是一个简单的 C++ 实现:
首先,定义一个抽象基类 `AbstractProduct`,用于表示所有产品的共同接口:
```cpp
class AbstractProduct {
public:
virtual void operation() = 0;
};
```
然后,定义两个具体产品类 `ConcreteProduct1` 和 `ConcreteProduct2`,它们实现了 `AbstractProduct` 接口:
```cpp
class ConcreteProduct1 : public AbstractProduct {
public:
void operation() override {
std::cout << "ConcreteProduct1::operation()" << std::endl;
}
};
class ConcreteProduct2 : public AbstractProduct {
public:
void operation() override {
std::cout << "ConcreteProduct2::operation()" << std::endl;
}
};
```
接下来,定义一个抽象工厂类 `AbstractFactory`,它提供了创建产品的接口,但是没有具体实现:
```cpp
class AbstractFactory {
public:
virtual AbstractProduct* createProduct1() = 0;
virtual AbstractProduct* createProduct2() = 0;
};
```
最后,定义两个具体工厂类 `ConcreteFactory1` 和 `ConcreteFactory2`,它们实现了 `AbstractFactory` 接口,并分别创建了 `ConcreteProduct1` 和 `ConcreteProduct2`:
```cpp
class ConcreteFactory1 : public AbstractFactory {
public:
AbstractProduct* createProduct1() override {
return new ConcreteProduct1();
}
AbstractProduct* createProduct2() override {
return new ConcreteProduct2();
}
};
class ConcreteFactory2 : public AbstractFactory {
public:
AbstractProduct* createProduct1() override {
return new ConcreteProduct2();
}
AbstractProduct* createProduct2() override {
return new ConcreteProduct1();
}
};
```
现在,我们可以使用抽象工厂来创建具体产品,而不需要知道它们的具体类:
```cpp
int main() {
AbstractFactory* factory = new ConcreteFactory1();
AbstractProduct* product1 = factory->createProduct1(); // 创建 ConcreteProduct1
AbstractProduct* product2 = factory->createProduct2(); // 创建 ConcreteProduct2
product1->operation(); // 调用 ConcreteProduct1 的操作
product2->operation(); // 调用 ConcreteProduct2 的操作
delete product1;
delete product2;
delete factory;
factory = new ConcreteFactory2();
product1 = factory->createProduct1(); // 创建 ConcreteProduct2
product2 = factory->createProduct2(); // 创建 ConcreteProduct1
product1->operation(); // 调用 ConcreteProduct2 的操作
product2->operation(); // 调用 ConcreteProduct1 的操作
delete product1;
delete product2;
delete factory;
return 0;
}
```
阅读全文