【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
裝飾模式是比較好玩,也比較有意義。其實就我個人看來,它和責任鏈還是蠻像的。只不過一個是比較判斷,一個是迭代處理。裝飾模式就是那種迭代處理的模式,關鍵在哪呢?我們可以看看資料結構。
[cpp] view plaincopyprint?
- typedef struct _Object
- {
- struct _Object* prev;
-
- void (*decorate)(struct _Object* pObject);
- }Object;
typedef struct _Object<br />{<br /> struct _Object* prev;</p><p> void (*decorate)(struct _Object* pObject);<br />}Object;<br /> 裝飾模式最經典的地方就是把pObject這個值放在了資料結構裡面。當然,裝飾模式的奧妙還不僅僅在這個地方,還有一個地方就是迭代處理。我們可以自己隨便寫一個decorate函數試試看,
[cpp] view plaincopyprint?
- void decorate(struct _Object* pObeject)
- {
- assert(NULL != pObject);
-
- if(NULL != pObject->prev)
- pObject->prev->decorate(pObject->prev);
-
- printf("normal decorate!\n");
- }
void decorate(struct _Object* pObeject)<br />{<br /> assert(NULL != pObject);</p><p> if(NULL != pObject->prev)<br /> pObject->prev->decorate(pObject->prev);</p><p> printf("normal decorate!\n");<br />} 所以,裝飾模式的最重要的兩個方面就體現在:prev參數和decorate迭代處理。