推荐家居企业网站建设,vue做网站前端,网站后期维护价格,建设厅网站首页简单工厂模式#xff08;Simple Factory Pattern#xff09; 是一种创建型设计模式#xff0c;它定义了一个工厂类#xff0c;通过这个工厂类可以创建不同类型的对象。简单工厂模式的主要目的是将对象的创建逻辑集中在一个地方#xff0c;简化客户端的代码#xff0c;使得…
简单工厂模式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 方法进行演示。
简单工厂模式的优点在于它将对象创建的逻辑集中到工厂类中使得客户端代码变得更简单、更清晰。然而简单工厂模式也有局限性例如它违反了开闭原则即添加新产品时需要修改工厂代码。在需要扩展产品类型时可以考虑使用工厂方法模式或抽象工厂模式等更灵活的设计模式。