近日 見同事正在看 高煥堂新書 《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è)計大師”。。。。。