5.设计模式-工厂方法模式
2026/5/17 0:00:35 网站建设 项目流程

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

简单工厂模式

需求

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

代码

#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图

总结

  • 工厂方法模式相比简单工厂模式的优点?
    简单工厂模式在新增加功能时,需要修改工厂类,违背了开闭原则。工厂方法使一个类的实例化延迟到其子类,新增功能时增加一个工厂子类即可。缺点是由于每加一个产品,就需要加一个产品工厂的接口,增加了额外的开发量。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询