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++有父類和純虛函數,把方法定義成純虛函數,子類繼承父類并重載純虛函數的方法,就達到了我們想要的目的了。
上一篇:自建小型狗糧廠需要哪些設備








