设计模式之工厂方法模式
设计模式之工厂方法模式(Factory Method Pattern)
模式定义
工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
类图
代码
//抽象产品类
class Product {
public:
virtual void use() = 0;
//抽象类的析构函数设置为虚函数
virtual ~Product() {}
};
class ProductA : public Product {
public:
void use() override
{
cout << "void ProductA::use()" << endl;
}
};
class ProductB : public Product {
public:
void use() override
{
cout << "void ProductB::use()" << endl;
}
};
//抽象工厂类
class Factory {
public:
virtual Product* createProduct() = 0;
virtual ~Factory() {}
};
class FactoryA : public Factory {
public:
Product* createProduct() override {
return new ProductA();
}
};
class FactoryB : public Factory {
public:
Product* createProduct() override {
return new ProductB();
}
};
void test()
{
//生产产品A
unique_ptr<Factory> factoryA(new FactoryA());
unique_ptr<Product> productA(factoryA->createProduct());
productA->use();
//生产产品B
cout << endl << endl;
unique_ptr<Factory> factoryB(new FactoryB());
unique_ptr<Product> productB(factoryB->createProduct());
productB->use();
}
工厂方法模式的优点
- 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
- 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
- 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
- 对扩展开放对修改关闭;解决了简单工厂的缺点问题。
工厂方法模式的缺点
- 类的个数容易过多,增加复杂度。
- 增加了系统的抽象性和理解难度。
- 接口的传入参数类型需要一致,且只能对单一变化量接口使用。
- 工厂只能生产一种产品,此弊端可使用抽象工厂模式解决。
使用场景
- 客户只知道创建产品的工厂名,而不知道具体的产品名。
- 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
- 客户不关心创建产品的细节,只关心产品的品牌。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南