C語言 設(shè)計模式之訪問者模式
C語言訪問者模式
概要:
訪問者模式,聽上去復(fù)雜一些。但是,這種模式用簡單的一句話說,就是不同的人對不同的事物有不同的感覺。比如說吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐??墒?,不同的地方的人未必都喜歡這兩種豆腐。四川的朋友可能更喜歡辣豆腐,江浙的人就可能對臭豆腐更喜歡一些。那么,這種情況應(yīng)該怎么用設(shè)計模式表達(dá)呢?
typedef struct _Tofu { int type; void (*eat) (struct _Visitor* pVisitor, struct _Tofu* pTofu); }Tofu; typedef struct _Visitor { int region; void (*process)(struct _Tofu* pTofu, struct _Visitor* pVisitor); }Visitor;
就是這樣一個豆腐,eat的時候就要做不同的判斷了。
void eat(struct _Visitor* pVisitor, struct _Tofu* pTofu) { assert(NULL != pVisitor && NULL != pTofu); pVisitor->process(pTofu, pVisitor); }
既然eat的操作最后還是靠不同的visitor來處理了,那么下面就該定義process函數(shù)了。
void process(struct _Tofu* pTofu, struct _Visitor* pVisitor) { assert(NULL != pTofu && NULL != pVisitor); if(pTofu->type == SPICY_FOOD && pVisitor->region == WEST || pTofu->type == STRONG_SMELL_FOOD && pVisitor->region == EAST) { printf("I like this food!\n"); return; } printf("I hate this food!\n"); }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C++?AnimeGAN實(shí)現(xiàn)照片一鍵動漫化
AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移加生成對抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進(jìn),并提出了一個更加輕量級的生成器架構(gòu)。本文將介紹如何運(yùn)用AnimeGAN實(shí)現(xiàn)照片一鍵動漫化,需要的可以參考一下2021-11-11為什么要學(xué)習(xí)C語言 C語言優(yōu)勢分析
不止一個學(xué)生問到我:“老師,為什么我們的應(yīng)用程序設(shè)計要學(xué)C語言而不是別的?C語言不是已經(jīng)過時了嗎?如果現(xiàn)在要寫一個Windows程序,用VB或Dephi開發(fā)多快呀,用C行嗎?退一萬步,為什么選擇C而不是C++呢?”2013-07-07C++獲取當(dāng)前系統(tǒng)時間的方法總結(jié)
這篇文章主要介紹了C++獲取當(dāng)前系統(tǒng)時間的方法,實(shí)例總結(jié)了四個獲取系統(tǒng)時間的方法,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04哈希表實(shí)驗(yàn)C語言版實(shí)現(xiàn)
以下是對哈希表實(shí)驗(yàn)用C語言實(shí)現(xiàn)的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07C語言實(shí)現(xiàn)BMP轉(zhuǎn)換JPG的方法
這篇文章主要介紹了C語言實(shí)現(xiàn)BMP轉(zhuǎn)換JPG的方法,涉及C#圖片格式轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07