前言穿衣打扮是現在的時尚潮流,我們時常刷**來不斷滿足自己的打扮需求,買個帽子、換條褲子、整雙時尚鞋。需求是沒有極限的,無止境的購物,只要存在這個平台那麼這些裝飾性的購物是不可避免的。這在我們軟體開發中可以看做是為我們例項化的物件新增一些額外的功能,要是我們對於每個都定義個子類來繼承的話,那就是指數增長,根本沒有頭。那麼我們但是這種無止境的職責是新增是行不通的,此時裝飾模式登場。通過動態的給物件新增另乙個職責來解決。
裝飾模式decorator
:動態的給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活
。理解:設計書上的例子
將人和服飾分離,就跟分層似的。把服飾做乙個介面讓人這個類來呼叫,這樣就很好的分離開了,人使用介面,擴充套件時實現介面,體現了依賴於抽象的原則。
component(被裝飾物件超類)
:定義物件的介面,可以給這些物件動態地新增職責.
concretecomponent(具體被裝飾物件)
:定義具體的物件,decortor可以給它增加額外的職責.
decorator(裝飾者抽象類)
:維護乙個指向component例項的引用,並定義了與 component一致的介面
concredecorator(具體裝飾者)
:給內部具體被裝飾物件增加具體的職責.
裝飾模式結構圖
總結:看著書上面的總結很好,我們在這裡就用用吧。
我覺得裝飾模式,是為已有功能動態的新增更多功能的一種方法。但是到底什麼時候用它呢?
在本文的最初設計中,當
系統需要新增新功能的時候,是向舊的類中新增新的**,這些新增的**通常裝飾了原有類的核心職能或主要行為
。這種設計方式問題在於,
他們在主類中增加了新的字段、新的方法、新的邏輯,從而增加了主類的負責度,就行起初的那個人類,
而這些新加入的東西僅僅是為了滿足一些在某種特定情況下才會執行的特殊行為的需求。 但是
裝飾模式
提供了乙個非常好的
解決方案
,它把每個要裝飾的功能放在單獨的類中,並讓這個類包含它所要裝飾的物件,因此,當執行特殊行為時,在viewcontroller裡就可以根據需求有選擇、按順序的使用裝飾功能包裝物件了。
通過這樣的解決方案,我們可以把自己捂得很嚴實,也可以清涼的省布料。
裝飾模式的優點:
1.把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。
2.當有效的把類中的核心功能和裝飾功能區分開了,可以去除相關類中重複的裝飾邏輯。
大話設計模式 裝飾模式
動態地給乙個物件新增一些額外的職責。優點 把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。有效地把類的核心功能和裝飾功能區分開了。解決的問題 已經開發完畢的物件,後期由於業務需要,對舊的物件需要擴充套件特別多的功能,這時候使用給物件動態地新增新的狀態或者行為 即裝飾模式 方法,而不是使用子類靜...
大話設計模式 裝飾模式
裝飾模式 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。裝飾模式的uml類圖 component是定義乙個物件介面,可以給這些物件動態的新增職責。concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責。decorator,裝飾抽象類,...
《大話設計模式》 裝飾模式
裝飾模式優點 將類中原有的裝飾功能移出,作為單獨的乙個或幾個物件。簡化了原有的類,同時又可以動態的為類增加某一項或某幾項裝飾,而不必修改原類。有效的把類的核心職責和裝飾功能區分開來,並且去除相關類中重複的裝飾邏輯。同時讓類在某些特定的時候,才擁有某些特定的功能。常用場景 加密資料 過濾詞彙。裝飾模式...