C++实现抽象工厂模式
时间: 2023-09-26 09:11:07 浏览: 97
抽象工厂模式是一种创建型设计模式,它允许客户端使用抽象接口来创建一组相关或依赖对象的系列,而不需要指定它们具体的类。
在C++中,抽象工厂模式可以通过如下方式实现:
1. 定义抽象产品类
```c++
class AbstractProductA {
public:
virtual void operationA() = 0;
};
class AbstractProductB {
public:
virtual void operationB() = 0;
};
```
2. 定义具体产品类
```c++
class ConcreteProductA1 : public AbstractProductA {
public:
void operationA() override {
std::cout << "ConcreteProductA1::operationA" << std::endl;
}
};
class ConcreteProductA2 : public AbstractProductA {
public:
void operationA() override {
std::cout << "ConcreteProductA2::operationA" << std::endl;
}
};
class ConcreteProductB1 : public AbstractProductB {
public:
void operationB() override {
std::cout << "ConcreteProductB1::operationB" << std::endl;
}
};
class ConcreteProductB2 : public AbstractProductB {
public:
void operationB() override {
std::cout << "ConcreteProductB2::operationB" << std::endl;
}
};
```
3. 定义抽象工厂类
```c++
class AbstractFactory {
public:
virtual AbstractProductA* createProductA() = 0;
virtual AbstractProductB* createProductB() = 0;
};
```
4. 定义具体工厂类
```c++
class ConcreteFactory1 : public AbstractFactory {
public:
AbstractProductA* createProductA() override {
return new ConcreteProductA1();
}
AbstractProductB* createProductB() override {
return new ConcreteProductB1();
}
};
class ConcreteFactory2 : public AbstractFactory {
public:
AbstractProductA* createProductA() override {
return new ConcreteProductA2();
}
AbstractProductB* createProductB() override {
return new ConcreteProductB2();
}
};
```
5. 客户端使用抽象工厂创建产品
```c++
int main() {
AbstractFactory* factory = new ConcreteFactory1();
AbstractProductA* productA = factory->createProductA();
AbstractProductB* productB = factory->createProductB();
productA->operationA(); // output: ConcreteProductA1::operationA
productB->operationB(); // output: ConcreteProductB1::operationB
delete productA;
delete productB;
delete factory;
return 0;
}
```
这样就完成了抽象工厂模式的实现。客户端只需要知道工厂的抽象接口,而不需要知道具体的产品类,从而实现了解耦。
阅读全文