裝飾者模式理解

這周末在家看了裝飾者模式,但是對它的理解不是很透徹,在這裡把自己的理解記錄下來。

書中對裝飾者模式提出的編程理念是:

Classes should be open for extension but closed for modification.

類的設計應該對拓展(原文是:繼承 謝謝@胡圖圖 ) 開放,對修改關閉。

書中對裝飾者模式的定義是:

Dcorator - Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality.

裝飾者模式 -- 動態的給對象添加新的職責。裝飾者模式提供了一個比使用子類繼承更加靈活的拓展功能的方法。

我自己的理解:裝飾者模式解決的單純使用子類繼承的方法來對類的功能進行拓展的兩個問題:1) 功能多了之後的子類爆炸 2) 繼承不能夠動態的在運行時添加功能。

對於裝飾者模式,好比煎餅果子,早上的煎餅攤在賣煎餅果子,有人喜歡加雞蛋,有人喜歡香腸,還有人喜歡加生菜。這裡就能看出來,普通的煎餅就是被裝飾者,雞蛋、香腸還有生菜就是裝飾者,並且裝飾者是需要附著在被裝飾者上面的(裝飾者中有一個屬性是被裝飾者)。但是不管加不加雞蛋或者香腸,加多少,最終的結果都叫煎餅果子,所以被裝飾者被裝飾過後的結果還是一個被裝飾者,裝飾者在裝飾了被裝飾者之後的結果也是一個被裝飾者。可見,不管裝飾者還是被裝飾者,都是出自同一個類(不知道這樣的理解正確不正確。。。)。

裝飾者模式的出現,是為了解決被裝飾者有很多的可能的子功能,而且這些子功能還需要能夠自由的組合的問題。

以上是我的理解,錯誤之處還望大家能夠指正。

--EOF--

推薦閱讀:

類的設計原則
創建型模式之建造者模式
常見js業務場景分析以及解決思路
遊戲開發與程序設計知識總結01——設計模式
面向對象&設計模式

TAG:設計模式 | 編程思想 |