目录
简单工厂模式
在C++中,简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,其主要目的是通过一个工厂类,根据参数的不同来创建不同类的对象。
简单工厂模式并不属于23种经典设计模式之一,但它是许多其他创建型模式的基础,例如工厂方法模式和抽象工厂模式。
#include <iostream>
// 产品接口
class Product {
public:
virtual void operation() = 0;
virtual ~Product() {}
};
// 具体产品A
class ConcreteProductA : public Product {
public:
void operation() override {
std::cout << "ConcreteProductA" << std::endl;
}
};
// 具体产品B
class ConcreteProductB : public Product {
void operation() override {
std::cout << "ConcreteProductB" << std::endl;
}
};
// 简单工厂类
class SimpleFactory {
public:
static Product* createProduct(int type)
{
switch (type) {
case 1:
return new ConcreteProductA();
case 2:
return new ConcreteProductB();
default:
return nullptr;
}
}
};
int main()
{
// 产品A
Product *productA = SimpleFactory::createProduct(1);
if(productA)
{
productA->operation();
delete productA;
}
// 产品B
Product *productB = SimpleFactory::createProduct(2);
if(productB)
{
productB->operation();
delete productB;
}
return 0;
}
解释示例代码
- 产品接口
Product
定义了所有具体产品类的共同操作,这里是operation()
方法。 - 具体产品类
ConcreteProductA
和ConcreteProductB
分别实现了Product
接口,定义了自己的具体操作。 - 简单工厂类
SimpleFactory
包含了一个静态方法createProduct(int type)
,根据传入的参数type
来决定创建哪种具体产品对象。 - 客户端代码 中通过调用
SimpleFactory::createProduct
方法来创建具体产品对象,并调用其操作方法。
优点和适用场景
- 优点:将对象的创建和使用分离,客户端只需知道参数即可获取所需对象,隐藏了具体产品的实现细节。
- 适用场景:当需要创建的对象较少,客户端不需要知道对象的创建细节时,可以考虑使用简单工厂模式。
注意事项
- 简单工厂模式违背了开闭原则,因为每次新增产品都需要修改工厂类的代码。
文章评论