国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

原來高煥堂也誤用職責(zé)鏈模式

2019-11-17 03:54:22
字體:
供稿:網(wǎng)友
   近日 見同事正在看 高煥堂新書 《UML+OOPC 嵌入式C語言開發(fā)精講》偶然發(fā)現(xiàn)他對COR模式存在嚴(yán)重誤解。

廢話少說 ,具體如下:

  在他的大作 32.5 章節(jié)里 用到該模式



代碼如下:

#include "lw_oopc_kc.h"
#include "ex32-il.h"

CLASS(LED_P0)
{
    IMPLEMENTS(IL);
    void (*init)(LED_P0*);
    IL* next;
};

CLASS(LED_P1)
{
    IMPLEMENTS(IL);
    void (*init)(LED_P1*);
    IL* next;
};

CLASS(LED_P2)
{
    IMPLEMENTS(IL);
    void (*init)(LED_P2*);
    IL* next;
};



/* EX32-led.c */
#include <REG51F.H>
#include "lw_oopc_kc.h"
#include "ex32-led.h"

static void init_1(LED_P1* t) {
       t->next = NULL;
//    xxx = 0xf3;
}

static int pass_1(char ty, char hx, void *t) {
    LED_P1 *cthis = (LED_P1*)t;
    IL* ps = cthis->next;
    if(ty=='1')
         {
           P1 = hx;
           return 1;
         }
    if(ty=='A') P1 = hx;
    if(ps == NULL) return 0;
    else  return ps->pass(ty, hx, ps);
}


CTOR(LED_P1)
    FUNCTION_SETTING(init, init_1)
    FUNCTION_SETTING(IL.pass, pass_1)
END_CTOR
// -------------------------------
static void init_0(LED_P0* t) {
       t->next = NULL;
}

static int pass_0(char ty, char hx, void *t) {
    LED_P0 *cthis = (LED_P0*)t;
    IL* ps = cthis->next;
    if(ty=='0')
         {
           P0 = hx;
           return 1;
         }
    if(ty=='A') P0 = hx;
    if(ps == NULL) return 0;
    else  return ps->pass(ty, hx, ps);
}

CTOR(LED_P0)
    FUNCTION_SETTING(init, init_0)
    FUNCTION_SETTING(IL.pass, pass_0)
END_CTOR
//----------------------------------------
static void init_2(LED_P2* t) {
       t->next = NULL;
}

static int pass_2(char ty, char hx, void *t) {
    LED_P2 *cthis = (LED_P2*)t;
    IL* ps = cthis->next;
    if(ty=='2')
         {
           P2 = hx;
           return 1;
         }
    if(ty=='A') P2 = hx;
    if(ps == NULL) return 0;
    else  return ps->pass(ty, hx, ps);
}


CTOR(LED_P2)
    FUNCTION_SETTING(init, init_2)
    FUNCTION_SETTING(IL.pass, pass_2)
END_CTOR







這三個類 就是職責(zé)鏈中的負責(zé)處理請求與轉(zhuǎn)發(fā)請求的類,但 嚴(yán)重問題是 他們與 請求基本存在一一對應(yīng)的關(guān)系

if(ty=='0')
         {
           P0 = hx;
           return 1;
         }

這是LED_P0的責(zé)任, 如果 把'0'換為'1' 則就是  LED_P1的責(zé)任  這是我們從代碼里發(fā)現(xiàn)的, 其實他自己在書里也已經(jīng)寫了(如果ty值為'0',表示這是LED_P0的責(zé)任,于是將另一個參數(shù)hx值送到P0。如果ty值為'A',表示這是所有對象的都有的責(zé)任,。。)   




結(jié)論:高煥堂完全誤解了COR模式 ,其實這些代碼散發(fā)著 重復(fù)的臭味 完全可以重構(gòu)到表模式 具體如何重構(gòu) 不用我說了吧??

  


摘自這本書的高煥堂簡介:

     從事IT行業(yè)近30年,被稱為“臺灣OO技術(shù)教父級代表人物”;近年來,專注與產(chǎn)業(yè) 企業(yè)及嵌入式產(chǎn)品的架構(gòu)設(shè)計,被稱為

“臺灣軟件架構(gòu)設(shè)計大師”。。。。。





發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 万载县| 保亭| 南开区| 汉寿县| 阜康市| 甘洛县| 崇明县| 虎林市| 奎屯市| 密云县| 德昌县| 太保市| 南陵县| 宁陕县| 姜堰市| 汝阳县| 茶陵县| 江川县| 云林县| 腾冲县| 信宜市| 林芝县| 佛山市| 商丘市| 凤城市| 健康| 镶黄旗| 吉隆县| 宁化县| 华池县| 阳朔县| 新竹市| 饶河县| 旌德县| 康定县| 兴业县| 宽城| 博客| 邵阳市| 高碑店市| 平武县|