1. 工厂模式的核心价值与应用场景
工厂模式是面向对象编程中最常用的设计模式之一,它通过将对象的创建过程封装起来,使代码更加灵活、可维护。在实际项目中,我经常遇到需要根据不同类型创建对象的场景,而工厂模式完美解决了这个问题。
举个例子,假设我们正在开发一个图形编辑器,需要创建不同类型的图形对象(圆形、矩形、三角形等)。如果不使用工厂模式,代码中会散落着各种new Circle()、new Rectangle()这样的实例化语句。当需要添加新的图形类型时,就必须修改所有创建这些对象的地方。而使用工厂模式后,我们只需要在工厂类中添加新的创建逻辑即可。
提示:工厂模式特别适合以下场景:1) 创建过程复杂;2) 需要统一管理对象的创建;3) 系统需要支持多种产品类型的扩展。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 简单工厂模式的实现与解析
2.1 基本结构与实现
简单工厂模式是最基础的工厂实现,它通过一个静态方法根据输入参数返回不同的对象实例。下面是一个典型的C++实现:
cpp复制class Product {
public:
virtual ~Product() {}
virtual void operation() = 0;
};
class ConcreteProductA : public Product {
public:
void operation() override {
cout << "ConcreteProductA operation" << endl;
}
};
class ConcreteProductB : public Product {
public:
void operation() override {
cout << "ConcreteProductB operation" << endl;
}
};
class SimpleFactory {
public:
static Product* createProduct(const string& type) {
if (type == "A") {
return new ConcreteProductA();
} else if (type == "B") {
return new ConcreteProductB();
}
return nullptr;
}
};
2.2 使用示例与优缺点分析
使用简单工厂模式时,客户端代码变得非常简洁:
cpp复制Product* product = SimpleFactory::createProduct("A");
if (product) {
product->operation();
delete product;
}
这种模式的优点是:
- 客户端与具体产品类解耦
- 集中管理对象的创建逻辑
- 便于扩展新的产品类型
但缺点也很明显:
- 工厂类职责过重,违反单一职责原则
- 添加新产品需要修改工厂类,违反开闭原则
- 静态方法不利于继承和扩展
在实际项目中,我建议仅在产品类型较少且不经常变化时使用简单工厂模式。对于更复杂的需求,应该考虑工厂方法模式或抽象工厂模式。
3. 工厂方法模式的深入探讨
3.1 模式结构与实现原理
工厂方法模式通过定义一个创建对象的接口,但让子类决定实例化哪个类。这种模式解决了简单工厂的扩展性问题。下面是典型的C++实现:
cpp复制class Product {
public:
virtual ~Product() {}
virtual void operation() = 0;
};
class ConcreteProductA : public Product {
public:
void operation() override {
cout << "ConcreteProductA operation" << endl;
}
};
class Creator {
public:
virtual ~Creator() {}
virtual Product* createProduct() = 0;
void someOperation() {
Product* product = createProduct();
product->operation();
delete product;
}
};
class ConcreteCreatorA : public Creator {
public:
Product* createProduct() ove
