工厂模式
简单工厂模式
把创建封装进一个类里,当实现变化时,我们只需要修改这一个地方。
类图如下
工厂方法处理对象的创建,并将对象的创建封装在子类中,使得客户代码从子类对象的创建代码解耦。
代码示例如下
#include <iostream>
using namespace std;
class Product
{
public:
Product()
{
}
virtual ~Product()
{
}
virtual int Operate(int x,int y)
{
throw runtime_error("error");
}
};
class ProductA final : public Product // +
{
public:
ProductA() : Product() {}
virtual ~ProductA() {}
int Operate(int x,int y) override
{
return x + y;
}
};
class ProductB : public Product // *
{
public:
ProductB() : Product() {}
virtual ~ProductB() {}
int Operate(int x,int y) override
{
return x * y;
}
};
enum ProductType { PRODUCT_A, PRODUCT_B };
class Factory
{
public:
virtual ~Factory() {}
Product* create_product(ProductType type)
{
if (type == PRODUCT_A)
{
cout << "create product A" << endl;
return new ProductA();
}
else if (type == PRODUCT_B)
{
cout << "create product B" << endl;
return new ProductB();
}
else
{
throw runtime_error("error type");
}
}
};
int main()
{
cout << "test" << endl;
Factory factory;
Product* op1 = factory.create_product(PRODUCT_A);
cout << op1->Operate(3, 2) << endl;
Product* op2 = factory.create_product(PRODUCT_B);
cout << op2->Operate(3, 2) << endl;
//factory.create_product(PRODUCT_C);
return 0;
}
抽象工厂模式
抽象工厂为产品家族提供一个接口。
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
类图如下:
工厂模式和抽象工厂模式的区别
- 工厂模式适用于创建单一类型的对象,而抽象工厂模式适用于创建多个相互关联的对象。
- 工厂模式是一对一的,抽象工厂模式是多对多的。
抽象工厂的优点:
组织一批相关的产品,有多个工厂。
缺点:
添加产品的时候,需要改变接口,进入类的内部修改类。
工厂方法的优点:
将客户代码从要实例化的具体类中解耦,不需要知道要创建哪些具体类(接口是同一个,参数不一样)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构