添砖加瓦:设计模式(工厂方法模式)
1、工厂方法模式中的角色和职责
抽象工厂角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。
工厂角色:具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
抽象产品角色:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品角色:工厂方法模式所创建的具体实例对象。
简单工厂模式 + “开闭原则” = 工厂方法模式
2、工厂方法模式优缺点
优点:
(1) 不需要记住具体类名,甚至连具体参数都不用记忆。
(2) 实现了对象创建和使用的分离。
(3)系统的可扩展性也就变得非常好,无需修改接口和原类。
缺点:
(1)增加系统中类的个数,复杂度和理解难度增加。
(2) 增加了系统的抽象性和理解难度。
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 */ 18 class abstractFactory 19 { 20 public: 21 virtual Work *createJob() = 0; 22 }; 23 24 //实例 25 class Salesman :public Work 26 { 27 public: 28 virtual void job() 29 { 30 cout << "I`m a Salesman" << endl; 31 } 32 }; 33 34 //实现抽象工厂,返回抽象工作指针 35 class abstractSalesman : public abstractFactory 36 { 37 public: 38 virtual Work *createJob() 39 { 40 return new Salesman; 41 } 42 }; 43 44 /* 45 此时,若想添加一个医生类,那么只需要实现一个医生工厂和一个医生具体类,并不需要修改已有的代码 46 */ 47 class Doctor : public Work 48 { 49 virtual void job() 50 { 51 cout << "I`m a Doctor" << endl; 52 } 53 }; 54 class abstractDoctor : public abstractFactory 55 { 56 public: 57 virtual Work *createJob() 58 { 59 return new Doctor; 60 } 61 }; 62 63 int main(int argc, char* argv[]) 64 { 65 /* 66 依赖倒转原则, 是针对接⼝的编程, 67 那么,何为针对接⼝? 68 即只需要 使⽤ 抽象⼯⼚类的指针,和抽象⽔果类的指针, 69 通过多态的特性,就可以搞定完成具体类的业务。 70 */ 71 72 abstractFactory *abFactory = NULL; 73 Work *work = NULL; 74 75 /* 76 使用抽象指针完成售货员业务 77 */ 78 abFactory = new abstractSalesman; 79 work = abFactory->createJob(); 80 work->job(); 81 delete abFactory; 82 delete work; 83 84 /* 85 使用抽象指针完成医生业务 86 */ 87 abFactory = new abstractDoctor; 88 work = abFactory->createJob(); 89 work->job(); 90 delete abFactory; 91 delete work; 92 93 94 getchar(); 95 return 0; 96 }
【推荐】国内首个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工具