工厂方法模式
使用场景:
1、工厂方法模式适用于需要创建多个具有相同接口的对象的场景。当一个系统中需要大量的对象时,如果每个对象的创建都由客户端来完成,那么就会导致客户端代码复杂、耦合度高、可维护性差等问题。此时可以使用工厂方法模式来解决这些问题。
优势:
1、降低了代码耦合度,提高了系统的可维护性和可扩展性。
2、客户端不需要知道具体的产品类名,只需要知道产品所对应的工厂即可。
3、可以通过配置文件等方式来动态指定所需的具体工厂,从而实现了更加灵活的控制。
劣势:
1、增加了系统的抽象性和理解难度。
2、增加了系统的代码量和复杂度。
Code
#include <iostream>
using namespace std;
// 抽象产品类
class Shape {
public:
virtual void draw() = 0;
};
// 具体产品类:圆形
class Circle : public Shape {
public:
void draw() {
cout << "draw a circle" << endl;
}
};
// 具体产品类:矩形
class Rectangle : public Shape {
public:
void draw() {
cout << "draw a rectangle" << endl;
}
};
// 抽象工厂类
class ShapeFactory {
public:
virtual Shape* createShape() = 0;
};
// 具体工厂类:圆形工厂
class CircleFactory : public ShapeFactory {
public:
Shape* createShape() {
return new Circle();
}
};
// 具体工厂类:矩形工厂
class RectangleFactory : public ShapeFactory {
public:
Shape* createShape() {
return new Rectangle();
}
};
int main() {
ShapeFactory* factory = new CircleFactory();
Shape* shape = factory->createShape();
shape->draw();
delete shape;
delete factory;
factory = new RectangleFactory();
shape = factory->createShape();
shape->draw();
delete shape;
delete factory;
while (1);
return 0;
}