设计模式(4):工厂模式之简单工厂模式

一、什么是简单工厂模式?

简单工厂模式是一种创建型设计模式,这个模式实现了工厂设计模式的最基本形态,通过一个工厂类决定创建出哪一种产品类的实例。

简单工厂模式由以下几个核心角色组成:

  • 工厂类(Factory):负责创建具体对象的工厂类。它通常包含一个静态方法,根据客户端的请求参数决定创建哪个具体对象,并返回创建的对象。
  • 抽象产品类(Product):定义了产品的共同接口,描述了产品所具有的功能和行为。
  • 具体产品类(Concrete Product):实现了抽象产品类定义的接口,具体产品类是工厂类所创建的对象。

简单工厂模式将对象的实例化操作封装在工厂类中,客户端只需通过工厂类来请求所需的对象,而无需关心对象的具体创建过程。

二、代码举例

假设有一个工厂要绘制各种图形,首先有一个形状类

class Shape {
public:
    virtual void draw() = 0;
};

然后定义各种具体的形状类

// 定义矩形类
class Rectangle : public Shape {
public:
  void draw() override {
    cout << "Draw rectangle" << endl;
  }
};
// 定义圆类
class Circle : public Shape {
public:
  void draw() override {
    cout << "Draw circle" << endl;  
  }
};

接着定义工厂类,他包含静态的创建函数

class ShapeFactory {
public:
  static Shape* getShape(string type) {
    if (type == "rectangle") {
      return new Rectangle();
    }
    else if (type == "circle") {
      return new Circle();
    }
    return nullptr;
  }
};

最后是客户端调用的代码

// 绘制圆形
Shape* shape1 = ShapeFactory::getShape("circle"); 
shape1->draw();
// 绘制矩形
Shape* shape2 = ShapeFactory::getShape("rectangle"); 
shape2->draw();

有朋友肯定要问了,为什么这个工厂类的函数一定要创建成静态的呢,我主打一个叛逆,就不创建成静态的可以吗?

也不是不行,只是创建成静态的有以下几个优点:

1.不需要创建工厂类的实例
静态函数通过类名调用:

MyClass::func();

普通成员函数需要通过对象调用:

MyClass obj;
obj.func();

简单工厂模式中,工厂类仅用来封装创建对象的逻辑,不需要维护任何状态,所以不需要创建这个类的实例,直接用类名调用静态方法更简单。

2.避免产生工厂类依赖
如果使用普通成员函数,需要先创建工厂类对象,然后调用方法,这样客户端代码就依赖了这个具体的工厂类。使用静态函数可以避免这个依赖。

3.符合简单工厂模式的特点
简单工厂模式更加关注创建对象的方法,而不是工厂类本身,所以使用静态方法创建对象更符合这种设计思想。

三、总结

当对象种类较少,客户端无需明确指定创建对象时,可以使用简单工厂模式。但扩展性较差,不能符合开闭原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值