動態的將責任附加到物件上。想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇
封裝變化
多用組合,少用繼承
針對介面程式設計,不針對實現程式設計
為互動物件之間的松耦合設計而努力
對擴充套件開放,對修改關閉
在購買咖啡時,可以要求在其中加入各種調料,例如:蒸奶,豆漿,摩卡等其他調料,會根據加入的不同調料而收取不同的費用。
1,調料價錢的改變會使我們更改現有**
2,一旦出現新的調料我們就要加入新的方法,並改變超類中的cost()方法
3,以後可能會開發出新飲料,對這些飲料而言,某些調料可能並不適合,但是在這種設計方案中,子類仍將繼承那些不合適的方法
4,顧客如果要雙倍的摩卡怎麼辦
設計模式 (3)裝飾者模式
動態的將責任附加到物件上,在擴充套件功能上,裝飾者提供了比繼承更有彈性的替代方案。維護了開放封閉原則 對擴充套件開放,對修改封閉 將裝飾者和具體元件組合,就是在加入新的行為。組合和委託可以在執行時動態的加上新的行為。而繼承雖然也屬於擴充套件形式之一,但是非彈性設計,而且依賴繼承,類的行為只能在編譯時...
設計模式3 裝飾者模式
0.序 裝飾模式 使用物件組合的方式,在執行時裝飾類。可以在不修改任何底層 的情況下,給物件賦予新的職責 1.咖啡店例項 問題所在 乙個飲料抽象父類beverage 當子類過多時,出現類的 性複雜 很明顯,這是難以維護的,出現乙個新的飲料就要去繼承父類。一種特例 雙倍奶泡咖啡,算一種飲料,三倍奶泡咖...
設計模式 裝飾者模式
public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...