news 2026/4/23 16:15:29

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/4/23 13:03:06

系统文件eapprovp.dll丢失或损坏 免费下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/23 12:58:51

用COMSOL Multiphysics探索液滴铺展的数值模拟世界

[1]模型简介&#xff1a;COMSOL Multiphysics对液滴铺展进行数值模拟研究。 [2]案例内容&#xff1a;数值模型二个个 [3]模型特色&#xff1a;采用了两种不同的方法&#xff08;层流相场&#xff0c;层流水平集&#xff09;做液滴铺展&#xff0c;考虑了不同的条件&#xff0c;…

作者头像 李华
网站建设 2026/4/23 13:44:03

降重 + 去 AIGC 痕迹双 buff!虎贲等考 AI:让论文原创性 “无可挑剔”

如今&#xff0c;AI 写作工具的普及让论文创作效率大幅提升&#xff0c;但新的难题也随之而来&#xff1a;知网、维普等查重系统升级 AIGC 检测功能&#xff0c;不少同学辛苦完成的论文&#xff0c;要么因重复率超标被打回&#xff0c;要么因 AI 生成痕迹过重被判定 “不合规”…

作者头像 李华
网站建设 2026/4/23 12:29:57

开题报告反复被打回?虎贲等考 AI:让研究起点精准踩中学术规范

开题报告作为学术研究的 “第一块敲门砖”&#xff0c;直接决定后续论文写作的方向与根基。但对多数本科生、研究生而言&#xff0c;这却是一场 “反复修改的煎熬”&#xff1a;研究意义表述模糊被导师质疑&#xff0c;文献综述缺乏逻辑被要求重写&#xff0c;研究方案可行性不…

作者头像 李华
网站建设 2026/4/23 12:14:57

Windows系统文件dsreg.dll丢失 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/23 11:08:39

12.6 Transformer架构详解:自注意力、多头注意力与位置编码

12.6 Transformer架构详解:自注意力、多头注意力与位置编码 Transformer架构由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,它彻底摒弃了循环与卷积结构,完全依赖注意力机制构建序列模型,成为自然语言处理乃至整个深度学习领域里程碑式的突破[1]。该架…

作者头像 李华