1. 工厂方法模式深度解析:从理论到实战
作为一名有十年C++开发经验的程序员,我见过太多因为对象创建方式不当导致的代码维护噩梦。今天我们就来深入探讨工厂方法模式(Factory Method Pattern),这个在面向对象编程中至关重要的设计模式。
工厂方法模式的核心价值在于:将对象的创建与使用分离。想象一下,如果你是一家汽车制造厂的老板,你不需要知道每个零部件的具体制造过程,只需要告诉工厂"我需要一个发动机",工厂就会给你提供合适的发动机。这就是工厂方法模式在代码中的体现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 为什么需要工厂方法模式?
2.1 紧耦合带来的问题
让我们先看一个典型的紧耦合案例:
cpp复制class PaymentProcessor {
public:
void processPayment() {
CreditCardPayment* payment = new CreditCardPayment(); // 直接依赖具体类
payment->execute();
}
};
这段代码的问题很明显:PaymentProcessor直接依赖于CreditCardPayment这个具体实现类。当我们需要添加新的支付方式时,必须修改processPayment方法,这违反了开闭原则(对扩展开放,对修改关闭)。
2.2 工厂方法如何解耦
工厂方法模式通过引入抽象工厂和抽象产品来解决这个问题:
cpp复制class IPayment {
public:
virtual void execute() = 0;
virtual ~IPayment() {}
};
class PaymentFactory {
public:
virtual IPayment* createPayment() = 0;
virtual ~PaymentFactory() {}
};
class PaymentProcessor {
PaymentFactory* factory;
public:
PaymentProcessor(PaymentFactory* f) : factory(f) {}
void processPayment() {
IPayment* payment = factory->createPayment(); // 只依赖抽象
payment->execute();
}
};
现在,PaymentProcessor只依赖于抽象接口,不再关心具体的支付方式实现。当需要新增支付方式时,我们只需要添加新的具体产品和对应的工厂,而不需要修改现有代码。
3. 工厂方法模式的完整实现
3.1 UML类图解析

这个UML图展示了工厂方法模式的核心结构:
Product:抽象产品接口(对应上例中的IPayment)ConcreteProduct:具体产品实现类Creator:抽象工厂(对应PaymentFactory)ConcreteCreator:具体工厂实现类
3.2 完整代码示例
让我们扩展前面的支付处理示例,实现一个更完整的解决方案:
cpp复制// 抽象产品
class IPayment {
public:
virtual bool process(double amount) = 0;
virtual ~IPayment() {}
};
// 具体产品
class Cre
