在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    設(shè)計(jì)模式 命令 設(shè)計(jì)模式之命令模式

    介紹:

    命令模式是一種行為模式,它是將具體的請求過程與執(zhí)行過程分開,使代碼解耦,便于維護(hù);

    假設(shè)我們現(xiàn)在要設(shè)計(jì)一個(gè)命令解析的模塊:

    傳統(tǒng)方式:

    void func1(void){ printf("func1rn");}void func2(void){ printf("func2rn");}void func3(void){ printf("func3rn");}void prase_cmd(char cmd){ switch(cmd) { case 0x01: func1(); break; case 0x02: func2(); break; case 0x03: func3(); break; default: printf("cmd in invalidrn"); break; }}

    傳統(tǒng)方式是使用switch-case對命令進(jìn)行一一解析的,將請求過程與執(zhí)行過程耦合在一起,這樣的方式隨著命令的增加,prase_cmd中的代碼量會變得越來越多,也會越來越臃腫;使用命令模式就可以很好的避免傳統(tǒng)模式帶來的問題:

    void func1(void){ printf("func1rn");}void func2(void){ printf("func2rn");}void func3(void){ printf("func3rn");}typedef void (*cmd_func) (void);typedef struct{ int cmd; cmd_func func;}cmd_t;static cmd_t cmd_table[] ={ {0x01, func1}, {0x02, func2}, {0x03, func3},};void prase_cmd(int cmd){ for(int index = 0; index < sizeof(cmd_table) / sizeof(cmd_t); index++) { if(cmd_table[index].cmd == cmd) { cmd_table[index].func(); return; } }}

    通過命令模式,我們可以很好的進(jìn)行代碼的維護(hù)與拓展,我們只需要對cmd_table進(jìn)行維護(hù)即可,無需再關(guān)注prase_cmd里的內(nèi)容,實(shí)現(xiàn)了代碼的解耦;

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月28日 16:33
    下一篇 2022年6月28日 16:39

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息