大話設計模式之裝飾器模式

2022-08-01 00:03:18 字數 1113 閱讀 5765

背景:

乙個人出去約會,給這個人新增一些裝飾如穿什麼樣的上衣、下衣、領帶、鞋子等等。

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

uml類圖:

被裝飾的具體物件person類:

1

public

class

person 78

public

person(string name)

1112

public

void

show()

15 }

抽象的裝飾器類decorate:

1

public

class decorate extends

person 89

@override

10public

void

show() 14}

15 }

裝飾器a decoratea:

1

public

class decoratea extends

decorate

8 }

裝飾器b decorateb:

1

public

class decorateb extends

decorate

8 }

測試類:

1

public

class

main

12 }

總結:在起初的設計中,當系統需要新功能額時候,是向舊的類中新增新的**。這些新加的**通常裝飾了原有類的核心職責或主要行為,但是這種做法的問題在於,它們在主類中加入了新的字段,新的方法和新的邏輯,從而增加了主類的複雜度。而裝飾模式卻提供了乙個非常好的解決方案,它吧每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件,因此當需要執行特殊行為時,客戶**就可以在執行時根據需要有選擇的、按順序的使用裝飾功能包裝物件了。

典型應用是jdk中的io操作。

大話設計模式之裝飾器模式

裝飾器模式可以理解為為現有的類的新增一些並列的相互解耦的功能。舉個例子就是在i o中 流stream 和 reader writer 都有許多裝飾,而且他們之間沒有聯絡相互解耦。裝飾器模式的優點就是他可以有效的把類的核心功能和裝飾的功能區分開,並且可以去除其中的相關類中重複的裝飾邏輯。舉個例子 乙個...

大話設計模式之裝飾模式

概念 動態給乙個物件新增額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。結構圖 解析 component類 定義乙個物件介面,可以給這些物件動態新增職責 方法 concretecomponent類 定義了乙個具體的物件,也可以給這個物件新增職責。decorator類 裝飾抽象類,繼承 com...

大話設計模式之裝飾模式

定義 分離類的職責,讓裝飾和主類分離,好處 利用setcomponent來物件進行包裝,這樣每個裝飾物件的實現就和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心被如何新增到物件鏈中 有效的把類的核心職責和裝飾功能分開了,而且可以去除相關類中複雜的裝飾邏輯。例子 服飾類繼承人類,先...