简单工厂模式(Simple Factory Pattern) 是一种创建型设计模式,它定义了一个工厂类,通过这个工厂类可以创建不同类型的对象。简单工厂模式的主要目的是将对象的创建逻辑集中在一个地方,简化客户端的代码,使得客户端不需要直接实例化具体的类。
简单工厂模式的核心要素:
- Product(产品接口):定义了工厂方法所创建的对象的接口。
- ConcreteProduct(具体产品):实现了
Product
接口的具体类。 - Factory(工厂):提供一个静态方法来创建
Product
对象的实例。
示例:创建不同类型的 Shape
对象
我们将使用简单工厂模式来创建不同类型的 Shape
对象,例如 Circle
和 Rectangle
。
1. 定义 Shape
类(产品接口)
#include <iostream>
// Product interface
class Shape {
public:
virtual ~Shape() = default;
virtual void draw() const = 0;
};
2. 定义 ConcreteProduct
类(具体产品)
// ConcreteProduct 1
class Circle : public Shape {
public:
void draw() const override {
std::cout << "Drawing a circle." << std::endl;
}
};
// ConcreteProduct 2
class Rectangle : public Shape {
public:
void draw() const override {
std::cout << "Drawing a rectangle." << std::endl;
}
};
3. 定义 Factory
类(工厂)
#include <string>
// Factory
class ShapeFactory {
public:
static Shape* createShape(const std::string& type) {
if (type == "Circle") {
return new Circle();
} else if (type == "Rectangle") {
return new Rectangle();
} else {
return nullptr;
}
}
};
4. 使用简单工厂模式
int main() {
// 使用工厂创建不同类型的 Shape 对象
Shape* shape1 = ShapeFactory::createShape("Circle");
Shape* shape2 = ShapeFactory::createShape("Rectangle");
// 调用方法
if (shape1) {
shape1->draw();
}
if (shape2) {
shape2->draw();
}
// 清理资源
delete shape1;
delete shape2;
return 0;
}
解释
Shape
类是产品接口,定义了所有具体产品必须实现的方法draw
。Circle
和Rectangle
类是具体产品,它们实现了Shape
接口的draw
方法。ShapeFactory
类是工厂,提供一个静态方法createShape
,根据传入的类型参数创建不同的Shape
对象。这种方法将对象创建的逻辑集中在工厂类中,简化了客户端的代码。main
函数 中,通过工厂方法创建Shape
对象,并调用其draw
方法进行演示。
简单工厂模式的优点在于它将对象创建的逻辑集中到工厂类中,使得客户端代码变得更简单、更清晰。然而,简单工厂模式也有局限性,例如它违反了开闭原则(即添加新产品时需要修改工厂代码)。在需要扩展产品类型时,可以考虑使用工厂方法模式或抽象工厂模式等更灵活的设计模式。