工厂方法(Factory Method)是一种创建型设计模式,它提供了对对象创建的代码的封装,通过定义对象创建的接口来实现。具体创建代码封装在实现对象创建接口的类中。实际使用中创建新的对象的操作也可以从缓存里取或者其他的方式。
以下是工厂方法模式的一般结构和角色:
- 产品接口(Product): 定义了工厂方法创建的对象的共同行为。这是工厂方法所创建对象的共同父类或接口。
- 具体产品(ConcreteProduct): 实现了产品接口的具体类,是工厂方法所创建的对象。
- 工厂接口(Creator): 声明了一个创建对象的工厂方法,该方法返回一个产品接口类型的对象。这可以是抽象类或接口。
- 具体工厂(ConcreteCreator): 实现了工厂接口,负责实际创建产品对象的类。它含有与具体产品相关的逻辑。
类图
示例代码
#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;
}