工厂方法模式

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

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

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

类图

2024-01-07T13:25:25.png

示例代码

#include <iostream>

// 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;
}