工厂方法
模式定义
工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但将具体实例化哪个类的决定推迟到子类中。该模式让一个类的实例化延迟到其子类,遵循 “依赖倒置原则”。
核心角色与结构
角色组成
| 角色 | 职责 |
|---|---|
| 抽象产品 (IProduct) | 定义产品的接口 |
| 具体产品 (Concrete Product) | 实现抽象产品接口 |
| 抽象工厂 (IFactory) | 声明工厂方法,返回抽象产品 |
| 具体工厂 (Concrete Factory) | 重写工厂方法,返回具体产品 |
类图如下

✅ 优点
1. 开闭原则 (Open/Closed Principle)
- 对扩展开放:添加新产品时,只需新增具体工厂和具体产品类
- 对修改关闭:无需修改现有工厂和客户端代码
2. 解耦与封装
- 创建与使用分离:客户端只依赖抽象接口,不关心具体实现
- 降低耦合度:消除客户端与具体产品类的直接依赖
3. 单一职责原则
- 职责清晰:产品创建逻辑集中在工厂类中,便于维护
- 代码可读性:每个类都有明确的职责边界
4. 可扩展性强
- 易于扩展:新加产品类型时影响范围最小化
- 架构灵活:快速响应业务需求变化
❌ 缺点
1. 类数量爆炸
- 复杂度增加:每个新产品都需要配套的工厂类
- 维护成本:大量小类增加文件管理和理解难度
2. 抽象层次复杂
- 过度设计:简单场景下可能引入不必要的复杂性
- 简单问题复杂化:对于稳定的创建逻辑显得冗余
C++代码
- 通过嵌套类规在类个数增加的缺点;
wall.h
class Wall {
protected:
Wall();
private:
class WallFactory
{
private:
WallFactory();
public:
std::shared_ptr<Wall> create()
{
return std::shared_ptr<Wall>(new Wall());
};
};
public:
static WallFactory factory;
};
client.cpp
auto wall = Wall::factory::create();