工厂方法模式

工厂方法(Factory Method)是一种创建型设计模式,它提供了对对象创建的代码的封装,通过定义对象创建的接口来实现。具体创建代码封装在实现对象创建接口的类中。实际使用中创建新的对象的操作也可以从缓存里取或者其他的方式。

以下是工厂方法模式的一般结构和角色:

  1. 产品接口(Product): 定义了工厂方法创建的对象的共同行为。这是工厂方法所创建对象的共同父类或接口。
  2. 具体产品(ConcreteProduct): 实现了产品接口的具体类,是工厂方法所创建的对象。
  3. 工厂接口(Creator): 声明了一个创建对象的工厂方法,该方法返回一个产品接口类型的对象。这可以是抽象类或接口。
  4. 具体工厂(ConcreteCreator): 实现了工厂接口,负责实际创建产品对象的类。它含有与具体产品相关的逻辑。

类图

![2024-01-07T13:25:25.png][1]

示例代码

```c++

include

// 1. 产品接口 class Car { public: virtual void drive() const = 0; };

// 2. 具体产品 class Sedan : public Car { public: void drive() const override { std::cout << "Driving Sedan" << std::endl; } };

class SUV : public Car { public: void drive() const override { std::cout << "Driving SUV" << std::endl; } };

// 3. 工厂接口 class CarFactory { public: virtual Car* createCar() const = 0; };

// 4. 具体工厂 class SedanFactory : public CarFactory { public: Car* createCar() const override { return new Sedan(); } };

class SUVFactory : public CarFactory { public: Car* createCar() const override { return new SUV(); } };

int main() { // 使用工厂方法创建汽车实例 CarFactory sedanFactory = new SedanFactory(); Car sedan = sedanFactory->createCar(); sedan->drive();

CarFactory* suvFactory = new SUVFactory();
Car* suv = suvFactory->createCar();
suv->drive();

// 释放资源
delete sedanFactory;
delete sedan;
delete suvFactory;
delete suv;

return 0;

}



  [1]: https://lcslearn.top/usr/uploads/2024/01/3987429922.png