最近在學習design pattern.在看完decorator與strategy之後,產生了乙個疑問,兩者之間的區別和聯絡是什麼?
decorator與strategy都實現了多型。而其最重要的一點是decorator的多型是基於具體物件。
比如我們定義乙個「人「這樣的類,人剛生下來時,除了吃喝拉撒什麼都不會,後來才會走,會說話,會聽,會寫。
men * a =new decoratortalk( new decoratorwalk(new men()));
這樣a是乙個會走會說的人。如果定義乙個啞巴,則是
men * b = new decoratorwalk(new men());
這就是decorator模式,把object的功能通過decorator加上去.
而strategy更著重於對某乙個功能的實現不同。同樣是」運動「,不同動物表現出來的不同。鳥飛魚遊。這也是為什麼
strategy可以由template來替換的原因(這裡先不考慮兩者的優缺點)。
decorator也可以 通過靜態繼承,或者strategy模式來實現。但是不同的組合會產生不同的子類。就如"人"的例子,癱瘓會說會寫會聽不會走,啞巴會寫會聽會走不會說,文盲會走會說會聽不會寫,幼兒只會聽說,不會走等等等等。如果每種組合都成乙個子類,則會很複雜。這裡只定義乙個"人」,根據具體物件,把不同功能加上去,就是decorator.
理解錯誤的地方,還請大家指正
Java設計模式之Decorator模式
感覺比之前理解深了一點,紅字為新理解的內容,小白看過來 首先,不抽象,舉個例子。我要去喝咖啡,咖啡店裡有兩種咖啡,一種摩卡的,一種藍山的,摩卡的50塊,藍山的100塊。買了咖啡後還能放配料,有牛奶和伴侶。牛奶10塊一包,伴侶高階一 點,15塊一包。現在店裡新上貨一種配料方糖,5塊錢一包,現在把上述的...
設計模式之裝飾模式(Decorator)
現在有這樣乙個場景,需要給乙個人穿不同風格的衣服,那在物件導向的思想下應該怎麼寫呢 class person public void show abstract class finery class tshirts extends finery class pants extends finery ...
設計模式之裝飾模式(Decorator)
1 裝飾者模式,動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更加有彈性的替代方案。2 組合和繼承的區別 繼承。繼承是給乙個類新增行為的比較有效的途徑。通過使用繼承,可以使得子類在擁有自身方法的同時,還可以擁有父類的方法。但是使用繼承是靜態的,在編譯的時候就已經決定了子類的行為,我們...