news 2026/1/13 17:59:34

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/21 18:22:08

牵引变压器差动保护二次接线系统仿真模型探索

牵引变压器差动保护二次接线系统仿真模型 MATLAB/simulink 打包发送仿真源文件到邮箱&#xff0c;模型可实现变压器电压电流信息量的测量&#xff0c;以及验证继电保护装置动作的情况在电力系统中&#xff0c;牵引变压器的安全稳定运行至关重要&#xff0c;差动保护作为其重要的…

作者头像 李华
网站建设 2025/12/21 18:19:15

Java毕设选题推荐:基于Java实验室预约管理系统基于springboot的实验室预约系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2025/12/21 18:19:13

人工智能会全面超越人类吗,如何定义超越?

续拿电脑的运作机制来作对比&#xff0c;电脑诞生初始&#xff0c;只能被用来进行运算。可是随着科技的发展&#xff0c;电脑的内部构造&#xff0c;部件逐渐更换&#xff0c;有跳跃式的发展。计算&#xff0c;搜索&#xff0c;图文&#xff0c;看视频&#xff0c;录音&#xf…

作者头像 李华
网站建设 2025/12/21 18:18:23

PPP 协议

文章目录1 定义2 LCP 与 NCP3 PPP的帧格式4 PPPoE5 IPv6 IPoE1 定义 PPP&#xff08;Point-to-Point Protocol&#xff09;是指点对点协议&#xff0c;即一对一连接计算机的协议。 PPP 属于 OSI 参考模型的第 2 层&#xff0c;即数据链路层的协议。 PPP 不像以太网和 FDDI 等…

作者头像 李华
网站建设 2025/12/21 18:13:36

复习——IPC(进程间通信)

IPC&#xff08;进程间通信&#xff09;完整笔记一、IPC三大类别1. 传统/古老通信方式无名管道&#xff08;pipe&#xff09;&#xff1a;亲缘关系进程间通信有名管道&#xff08;FIFO&#xff09;&#xff1a;任意进程间通信信号&#xff08;signal&#xff09;&#xff1a;异…

作者头像 李华