裝飾模式動態的給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。其適用性體現在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。語出自gof《設計模式》。
《大話設計模式》裡講到裝飾模式的方法就是非常簡單的對乙個人進行裝飾——穿衣服,那就可以把具體的人理解為乙個物件,衣服,鞋子,太陽鏡等都是裝飾物,如果不考慮身材和衣物的大小的話,其實衣服可以隨便穿,順序無所謂,只要你敢穿,這就是裝飾模式的精髓。但實際情況中,順序很重要,所以在應用裝飾模式時一定要注意順序,或者把相關的子類的設定做成完全無關,以免弄亂順序導致系統出錯。在gof的《設計模式》裡講到用裝飾模式去裝飾乙個使用者介面,新增滾動條,邊框之類的東西。要注意的是,裝飾後的物件已經不是從前的那個物件了。
在古劍裡,裝飾模式應該可以應用到主角裝備的更換中,那是個典型的穿衣服問題。另外我在想,是不是可以應用到戰鬥中的選招數中呢?因為古劍戰鬥一次可以發組合技能的,也就是說,可以用幾個低行動點數的招數組合起來攻擊敵人,我覺得這就是乙個裝飾模式。事先根本不知道要選擇什麼招數,也不知道先用哪一招,而且在確定攻擊前,這些選擇的招數可以撤銷。而且招數的組合基本上就是**式的,這些條件非常符合gof提出的裝飾模式的適用性。只不過此處的裝飾模式是受到行動點數的限制的,不可以無限制裝飾下去。當然,這只是我現在比較簡單的看法,如果以後在別的設計模式的學習過程中發現其實別的設計模式解決這個問題更好,我不介意完全推翻現在的想法。
好,以下是**實現。具體在實際情況中,有些類是可以合併的,我這裡實現的是根據uml圖畫出來的比較標準的情況。
component.h 檔案
concretecomponent.h 檔案
concretecomponent.cpp 檔案
decorator.h 檔案
decorator.cpp 檔案
concretedecoratora.h 檔案
concretedecoratora.cpp 檔案
concretedecoratorb.h 檔案
concretedecoratorb.cpp 檔案
main.cpp 檔案
執行結果
每天都搞到這個時候……唉……算了,為了能去燭龍,忍了~
不過貌似我都沒有寫注釋啊……回頭補上……不寫注釋的程式設計師可不是什麼好程式設計師……
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...
設計模式 裝飾模式
剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...
設計模式 裝飾模式
複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...