1. 工厂模式初探:从披萨店说起
第一次翻开《Head First设计模式》的工厂模式章节时,那个披萨店的例子让我恍然大悟。想象你经营着一家披萨连锁店,当顾客下单时,不同分店需要制作符合当地口味的披萨——纽约店做薄脆饼底,芝加哥店做厚底深盘。如果直接在订单处理代码里写死各种if-else判断分店类型,每次新增分店就得修改核心代码,这显然违反了开闭原则。
工厂模式的核心价值就在于此:将对象创建的复杂逻辑封装起来,让调用者无需关心具体实现细节。在C++中实现这一点,我们需要理解几个关键概念:
- 简单工厂:一个静态方法根据输入参数返回不同产品对象
- 工厂方法:定义创建对象的接口,让子类决定实例化哪个类
- 抽象工厂:创建相关或依赖对象的家族,而不需指定具体类
重要提示:工厂模式不是银弹。在简单场景中使用工厂反而会增加不必要的复杂度。当系统中存在大量相似对象的创建逻辑,且这些逻辑可能频繁变化时,才是它的用武之地。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. C++实现工厂方法模式详解
2.1 基础架构搭建
让我们用C++还原书中的披萨店案例。首先定义产品接口:
cpp复制class Pizza {
public:
virtual ~Pizza() = default;
virtual void prepare() = 0;
virtual void bake() = 0;
virtual void cut() = 0;
virtual void box() = 0;
};
接着实现具体产品类:
cpp复制class NYStyleCheesePizza : public Pizza {
public:
void prepare() override { /* 纽约风味准备 */ }
void bake() override { /* 纽约风味烘焙 */ }
void cut() override { /* 纽约风味切片 */ }
void box() override { /* 纽约风味包装 */ }
};
class ChicagoStyleCheesePizza : public Pizza {
// 类似实现芝加哥风味
};
``
