裝飾模式:
動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。
優點:把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類。可以有效地把類的核心職責和裝飾功能區分開,而且可以去除相關類中重複的裝飾邏輯。
使用場景
下面以乙個小demo為例講解:tshirts(shoe、kuzi) extends finery ,finery extends person 。decorate為測試類
(1)被裝飾的類
public class person
public void setname(string name)
public void show()
}
(2)裝飾類
public class finery extends person
@override
public void show()
}}
( 3)具體裝飾類tshirt (shoe和kuzi同理)
public class tshirts extends finery
}
(4)測試類
/**裝飾者模式*/
public class decorate
}
總結
:兩層繼承關係,
tshirts(shoe、kuzi) extends finery extends person 。
finery作為連線person和tshirts類的「橋梁」,子類show中呼叫super.show,在裝飾的時候傳遞子類物件,然後呼叫子類物件的show方法。迴圈直到結束。這樣做使每個裝飾物件的實現和如何使用這個物件分離開了。每個裝飾物件只關心自己的功能,不需要關心如何被新增到物件鏈當中。
設計模式系列 裝飾模式
本文屬於設計模式的必讀書籍 head first design patterns 的讀書筆記,有不正確的地方歡迎指正。首先,看看gof對裝飾模式的定義 意圖 動態的給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式比生成子類更加靈活。定義很抽象,讓我們來看看乙個具體的業務場景 在城市的某個 商務...
設計模式系列(四) 裝飾模式
動態的為乙個物件的某些職責新增一些額外的功能,與通過繼承來獲得新功能相比,decorator 更加的靈活 試想一下,如果沒有 decorator,轉而使用繼承,每當想要為乙個物件新增某個功能時,我們就需要生成乙個子類。當需要這些功能的組合時,就要生成更多的具有組合功能的子類。這會產生兩個問題 1.類...
設計模式系列之 裝飾模式
小y 你最喜歡幹什麼?比爾 雷澤 最喜歡衝關打爆大機。小y 比爾,你想對觀眾說些什麼?比爾 雷澤 想挑戰我,隨時奉陪!一顆不夠,給你來三顆!小y 比爾 雷澤作為魂斗羅這麼經典的人物,原來也是乙個粗狂耿直boy呀。為了儲存住他的光輝形象和讓大家更加了解他,小y決定把比爾 雷澤的攻擊技能裝飾一番介紹給大...