Logic / 二:工厂方法模式--极简教程

Created Tue, 23 Sep 2025 01:21:17 +0800 Modified Sat, 18 Oct 2025 01:34:21 +0800

工厂方法

模式定义

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但将具体实例化哪个类的决定推迟到子类中。该模式让一个类的实例化延迟到其子类,遵循 “依赖倒置原则”

核心角色与结构

角色组成

角色 职责
抽象产品 (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();