news 2026/6/7 10:16:52

5.设计模式-工厂方法模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5.设计模式-工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

简单工厂模式

需求

一个大学生,以学雷锋做好事的名义去帮助老人做事。

代码

#include<stdio.h>#include<stdlib.h>typedefstructLeifeng{void(*sweep)();void(*wash)();void(*buyRice)();}Leifeng;voidSweep(){printf("扫地\n");}voidWash(){printf("洗衣\n");}voidBuyRice(){printf("买米\n");}Leifeng*ConstructLeiFeng(){Leifeng*obj=(Leifeng*)malloc(sizeof(Leifeng));obj->sweep=Sweep;obj->wash=Wash;obj->buyRice=BuyRice;returnobj;}// 学雷锋typedefstructUndergradute{Leifeng base;}Undergradute;typedefstructVolunteer{Leifeng base;}Volunteer;Undergradute*ConstructGraduate(){Undergradute*obj=(Undergradute*)malloc(sizeof(Undergradute));obj->base.sweep=Sweep;obj->base.wash=Wash;obj->base.buyRice=BuyRice;returnobj;}Volunteer*ConstructVolunteer(){Volunteer*obj=(Volunteer*)malloc(sizeof(Volunteer));obj->base.sweep=Sweep;obj->base.wash=Wash;obj->base.buyRice=BuyRice;returnobj;}typedefstructXueLeifengFactory{Leifeng*(*createLeiFeng)();}XueLeifengFactory;Leifeng*CreateLeifeng(){returnConstructLeiFeng();}Leifeng*CreateUndergraduate(){return(Leifeng*)ConstructGraduate();}Leifeng*CreateVoluteer(){return(Leifeng*)ConstructVolunteer();}

客户端:

intmain(){XueLeifengFactory factory={CreateUndergraduate};Leifeng*student=factory.createLeiFeng();student->sweep();student->wash();student->buyRice();free(student);return0;}

UML图

总结

  • 工厂方法模式相比简单工厂模式的优点?
    简单工厂模式在新增加功能时,需要修改工厂类,违背了开闭原则。工厂方法使一个类的实例化延迟到其子类,新增功能时增加一个工厂子类即可。缺点是由于每加一个产品,就需要加一个产品工厂的接口,增加了额外的开发量。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 7:10:46

第五章:学习——方法的验证与演化

第五章:学习——方法的验证与演化 5.1 学习不是获取知识,而是筛选方法 在前几章中,我们已经建立了完整的行为闭环: 状态 → 动态 → 因果 → 方法 → 需求 → 目标 → 任务 → 行为 → 新状态 但如果这一闭环只是机械地循环, 系统仍然只是一个“会动的装置”。 学习,正…

作者头像 李华
网站建设 2026/6/7 1:35:52

改进狼群算法与粒子群优化在机械臂路径规划与轨迹优化中的应用

110-改进狼群算法的机械臂路径规划代码&#xff0c;粒子群对机械臂关节进行轨迹优化 改进点&#xff1a; ① 自适应步长、 ② 莱纬飞行、 ③ 自适应召唤等改进 一共三个核心代码&#xff0c;构成完整的运动学路径规划轨迹优化对比实验&#xff1a; [1]图1 a、b、c、d为蚁群、遗…

作者头像 李华
网站建设 2026/6/6 10:37:13

第二章:状态、动态与时间的可计算表达

– 第二章&#xff1a;状态、动态与时间的可计算表达 2.1 时间并不是变量&#xff0c;而是问题本身 在第一章中&#xff0c;我们将连续世界抽象为特征、存在与场景&#xff0c;使世界首次具备了可操作性。 然而&#xff0c;这仍然遗漏了一个关键维度——时间。 时间与空间不同。…

作者头像 李华
网站建设 2026/6/5 13:02:48

cesium126,240308,Ce for Ue 加载ArcGIS WMTS Map:

&#xff08;246&#xff09; 这个网站&#xff0c;包含了在线地图&#xff0c; 但似乎是国外的网站&#xff0c;很慢&#xff0c; 用 cesium 的 WMTs 覆层进行加载 &#xff1a; Cesium for Unreal加载ArcGIS WMTS Map ArcGIS WMTS Map几个地图示例: https://map.geoq.cn/arcg…

作者头像 李华