裝飾者模式通過使用繼承,能夠將物件一層一層地包裝起來。
1,person是被裝飾的物件,裝飾者模式的類圖中,所有的類都繼承自person類。person類有乙個show方法,用來展示person物件哪些服飾裝飾了。通過繼承,所有的類都有show方法,因此當人穿上了某種服飾之後,就可能呼叫該服飾的show方法展示出來。當沒有任何服飾裝飾人時,執行show方法就表示最初始的人。
2,抽象的服飾類繼承自person類,儘管從自然概念上講,服飾並不是人。但這裡還是使用了繼承。原因之一是,這樣抽象的服飾類就有了show方法,從而使得各個具體的服飾類也有了show方法,當使用某個具體的服飾去裝飾物件時,就可以使用該服飾的show方法展示了。
3,儘管抽象的服飾類繼承了person類,但是它裡面還有乙個person類的屬性,這個屬性就是用來給各個具體的服飾類去指明它要裝飾哪個物件。由於該屬性是person型別的,因此a類服飾可以裝飾b類服飾,b類服飾可以裝飾c類服飾,……最終n類服飾裝了person物件(反過來看)。
4,由於每個具體的服飾都從父類那裡繼承了show方法,因此在show方法裡,每個具體的服飾都有乙個帶有個人特性的裝飾,然後再呼叫父類的裝飾(即所謂的一層一層包裝起來)。
分類:
design pattern
大話設計模式之裝飾者模式
通過閱讀本篇文章,可以給喜歡使用繼承的開發人員提供一種新的思路。我們將會了解濫用繼承帶來的不良後果,同時也會介紹比繼承更合理的實現方式。利用繼承設計子類的行為,是在編譯時期靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件...
大話設計模式之裝飾者模式
現在有乙個需求 設計乙個qq秀,可以隨意搭配服飾。直接將上 父類的父類person 為什麼需要父類的父類 乍看父父類其實是可有可無的,但如果刪掉,你會發現父類finery的decorate無法放裝飾者 package decoratorpattern public class person priv...
大話設計模式 裝飾者模式(總結)
1 裝飾者模式的一般應用場景 當系統增加新的功能,需要給類增加新的功能,而這些新的功能又主要是為了修飾原來類中的核心職責或者功能,也就是說,這些新的功能是用來修飾的,而且這些用來修飾的功能是在滿足某乙個特定情境下才會有需要執行的,這個時候就需要用到 裝飾者模式。2 裝飾者模式的構成 1 抽象構件 c...