锅炉信息网 > 锅炉知识 > 锅炉学习

C语言工厂模式

发布时间:

最近看涂鸦的代码的时候,发现里面有很多这类的作用,周末有时间,就来说说工厂模式。比如我们在调试外设设备的时候,如果用到工厂模式,会

最近看涂鸦的代码的时候,发现里面有很多这类的作用,周末有时间,就来说说工厂模式。

比如我们在调试外设设备的时候,如果用到工厂模式,会非常有利我们的代码构建。

比如,我们需要调试两款触摸屏设备汇顶和墩泰

void gt_init(void)n{n}nnint gt_open(void)n{nn}nint gt_get_point(void)n{nn}


然后如果是敦泰的触摸屏

void ft_init(void)n{n}nnint ft_open(void)n{nn}nint ft_get_point(void)n{nn}


使用的时候会这样

int point;nft_init();nft_open();ngt_init();ngt_open();nwhile(true){npoint = ft_get_point();npoint = gt_get_point();n}


那如果我们每次换一个触摸屏芯片厂家,这些初始化的东西,调用的位置,都需要修改,这是非常麻烦的。有没有什么办法实现一些统一呢?

这就是我们标题说的工厂模式。

我们给触摸屏的方法做统一,如果后面的触摸屏驱动实现了这样的方法,在调用的时候就会去执行。

/*ntouch_factory.hnCopyright(C),2022n*/ntypedef struct touch_screen {n char *name;n void (*init)(void);n void (*open)(void);n int (*get_point)();n} * touch_screen_t;nntouch_screen_t touch_screen_factory(char *name);

返回句柄实现

/*ntouch_factory.cnCopyright(C),2022n*/nstruct touch_screen touch_screen_list[] ={n {"goodix", gt_init, gt_open, gt_get_point},n {"ftt", ft_init, ft_open, ft_get_point},n};nntouch_screen_t touch_screen_factory(char *name) {n int i;nn for (i = 0; i < sizeof(touch_screen_list) / sizeof(touch_screen_list[0]); i++)n {n if (0 == strcmp(name, touch_screen_list[i].name))n {n touch_screen_list[i].init();n touch_screen_list[i].open();n return &touch_screen_list[i];n }n }nn return NULL;n}


调用的地方

/*nmain.cnCopyright(C),2022n*/n#include "touch_factory.h"nnint main(void)n{n touch_screen_t ft_touch= touch_screen_factory("ft");n touch_screen_t gt_touch= touch_screen_factory("goodix");nn ft_touch->init();n ft_touch->open();n ft_touch->get_point();n gt_touch->init();n gt_touch->open();n gt_touch->get_point();n}


这就是我所理解的工厂模式了

但是在C++上实现就会相对简单,C++有父类和纯虚函数,把方法定义成纯虚函数,子类继承父类并重载纯虚函数的方法,就达到了我们想要的目的了。

精选推荐

  • 催化燃烧设备供应商
    催化燃烧设备供应商

    催化燃烧设备供应商,催化燃烧处理装置厂家,本装置是采用废气先进入喷淋塔过滤——干式过滤—-蜂窝活性碳吸附—脱附再生——催化燃

  • 该不该有模具供应商
    该不该有模具供应商

    今天红姐又来跟我探讨供应商的管理问题了。故事是这样的:供应商来料不良,原因是模具问题。而那个模具是我们找的一家模具供应商做的

  • 什么牌子高压锅好,高压锅哪个牌子好,高压锅什么牌子好,高压锅哪个品牌好
    什么牌子高压锅好,高压锅哪个牌子好,高

    1苏泊尔 双重安全阀门 高压锅双重安全阀,防烫把手,复合底。这款高压锅拥有双重安全阀门,更好的保证使用安全。搭载防烫伤把手,方便起

  • 高压锅啥牌子好,高压锅哪个牌子的好,什么高压锅牌子好,高压锅推荐选购指南
    高压锅啥牌子好,高压锅哪个牌子的好,什

    1、双喜阶梯型复底高压锅推荐理由:高压锅满足上蒸下煮,饭菜同时进行,方便快速,有效提升烹饪效率。多重安全防护,安全系数较高,家人使用

0