裝飾模式 設計模式系列

2021-09-23 21:25:19 字數 1060 閱讀 9421

裝飾模式

動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。

優點:把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類。可以有效地把類的核心職責和裝飾功能區分開,而且可以去除相關類中重複的裝飾邏輯。

使用場景

下面以乙個小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決定把比爾 雷澤的攻擊技能裝飾一番介紹給大...