news 2026/8/5 2:14:57

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/8/5 12:17:23

MATLAB电力系统继电保护之自动重合闸

MATLAB电力系统继电保护自动重合闸在电力系统的运行维护中&#xff0c;继电保护里的自动重合闸功能可是相当关键。今天就来唠唠基于MATLAB实现电力系统继电保护自动重合闸。 什么是自动重合闸 自动重合闸装置&#xff0c;简而言之&#xff0c;就是当电力系统故障导致线路断路器…

作者头像 李华
网站建设 2026/8/5 11:52:50

10 个AI写作工具,助你轻松搞定继续教育论文!

10 个AI写作工具&#xff0c;助你轻松搞定继续教育论文&#xff01; AI 工具如何让论文写作更轻松&#xff1f; 在继续教育的道路上&#xff0c;撰写论文是许多学员必须面对的挑战。尤其是在当前 AIGC 技术广泛应用的背景下&#xff0c;如何既保证论文内容的原创性&#xff0c;…

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

【开题答辩全过程】以 基于Vue的茶道知识科普网站的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/8/4 22:13:34

主动配电网两阶段鲁棒恢复:Matlab 代码探索之旅

主动配电网两阶段鲁棒恢复matlab代码 参考文献IEEE TRANSACTIONS ON POWER SYSTEMS《Robust Restoration Method for Active Distribution Networks》 提出了一种主动配电网两阶段自适应鲁棒恢复优化模型&#xff0c;涉及不确定DG出力和负荷大小。 第一阶段为确定故障恢复策略&…

作者头像 李华
网站建设 2026/8/4 22:37:44

ICG-20660L加速度+陀螺仪六轴IMU传感器原理图设计,已量产(加速度传感器)

目录 1、电源:低噪声是 IMU 精度的 “地基” 2、接口:灵活适配,还能跟相机 “对齐节奏” 3、特性:刚好踩中防抖的需求点 4、调试小细节 最近做手持云台的 EIS 防抖项目,前几款 IMU 要么陀螺仪噪声压不下来,要么和相机帧同步总差半拍,直到换上 ICG-20660L 才算踩对了…

作者头像 李华