添砖加瓦:设计模式(简单工厂模式)
1、简单工厂模式中的角色和职责:
工厂角色:简单工厂模式的核心,负责实现创建所有的实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象
抽象产品角色:简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口
具体产品角色:简单工厂模式所创建的具体实例对象
2、简单工厂模式的优缺点:
优点:
(1)实现了对象的创建和使用的分离
(2)不需要记住具体类名,只需记住参数即可,减少记忆量
缺点:
(1)工厂类的职责过重,一旦不能工作,系统会受到影响
(2)增加系统中类的个数,复杂度和理解难度增加
(3)违反“开闭原则”,增加新产品需要修改工厂逻辑,导致工厂越来越复杂
3、适用场景
(1)工厂类负责创建的对象较少。因为创建的对象少,所以不会造成工厂方法中的业务逻辑太过复杂
(2)客户端只知道传入工厂类的参数,对于如何创建对象并不关心
4、示例:

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 //简单工厂模式 7 /* 8 * 定义一个人类抽象类,供具体工种实现和工厂使用 9 */ 10 class Work 11 { 12 public: 13 virtual void job() = 0; 14 }; 15 16 //实例 17 class Salesman :public Work 18 { 19 public: 20 virtual void job() 21 { 22 cout << "I`m a Salesman" << endl; 23 } 24 }; 25 26 class Doctor : public Work 27 { 28 virtual void job() 29 { 30 cout << "I`m a Doctor" << endl; 31 } 32 }; 33 34 //现在添加一个教师类,则只需要再创建一个教师类 35 class Teacher : public Work 36 { 37 virtual void job() 38 { 39 cout << "I`m a Teacher" << endl; 40 } 41 }; 42 43 //工厂类 44 class Factory 45 { 46 public: 47 Work* createWork(string work) 48 { 49 if (work == "Salesman") 50 return new Salesman; 51 else if (work == "Doctor") 52 return new Doctor; 53 /* 54 * 当创建新的工作时,Factory会变得越来越大,不符合开闭原则 55 */ 56 else if (work == "Teacher") 57 return new Teacher; 58 } 59 }; 60 61 int main(int argc, char* argv[]) 62 { 63 Factory *factory = new Factory; 64 Work *work = NULL; 65 66 /* 67 ⽤⼯⼚创建⼀个具体工作类,返回抽象类指针 68 那么这样就会发⽣多态。 69 此时抽象类指针指向了具体的⼦类,那么调⽤抽象⽅法 70 就会调⽤⼦类的实现⽅法。 71 */ 72 73 work = factory->createWork("Salesman"); 74 work->job(); 75 delete work; 76 work = NULL; 77 78 work = factory->createWork("Doctor"); 79 work->job(); 80 delete work; 81 work = NULL; 82 83 work = factory->createWork("Teacher"); 84 work->job(); 85 delete work; 86 work = NULL; 87 88 delete factory;//避免内存泄漏 89 90 getchar(); 91 return 0; 92 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具