《軟體設計精要與模式》讀書筆記(七)-Decorator 模式

來源:互聯網
上載者:User

Decorator 模式 (結構性模型)

以對用戶端透明的方式動態為對象附加責任。此模式提供了一個比繼承更為靈活的替代方案來擴充項物件的功能。雖然與適配器一樣的被稱作封裝者(wrapper)但他們本質有區別。適配器要改變所考慮對象介面,而不一定改變對象的效能;裝飾者是要保持對象介面,從而增強對象效能。

通過採用組合而非繼承的手法, Decorator模式實現了在運行時動態擴充項物件功能的能力,而且可以根據需要擴充多個功能。避免了使用繼承帶來的“靈活性差”和“多子類衍生問題”。

Decorator類在介面上表現為is-a Component的繼承關係,即Decorator類繼承了Component類所具有的介面。但在實現上又表現為has-a Component的組合關係,即Decorator類又使用了另外一個Component類。

Decorator模式並非解決“多子類衍生的多繼承”問題,Decorator模式應用的要點在於解決“主體類在多個方向上的擴充功能”——是為“裝飾”的含義。

 

適用情況:

1.在不影響其他對象的情況下,動態且透明的增加一個責任到一個對象。

2.希望責任和功能可以隨時增加或取消。

3.當無法通過類的繼承來擴充功能時。(繼承過多;類的定義被隱藏;類的定義不便於產生衍生類別)

結構:

1.抽象組件(CComponent):定義一個對象介面,可以動態附加責任到其他對象上。

2.具體組件(CConcreteComponent):定義可以被附加責任的對象。

3.裝飾者(CDecorator):維護一個到抽象組件對象的引用,並定義與抽象組件介面一致的介面,以便“裝飾”抽象組件對象的介面。

4.具體裝飾者(CConcreteDecorator):附加責任到抽象組件,完成具體的“裝飾”。

 

1.適用性

    在以下情況下應當使用裝飾模式:1.需要擴充一個類的功能,或給一個類增加附加責任;2.需要動態地給一個對象增加功能,這些功能可以再動態地撤銷;3.需要增加由一些準系統的排列組合而產生的非常大量的功能,從而使繼承關係變得不現實。

     2.實現要點

     讓裝飾角色還繼承抽象構件角色也是裝飾模式最大的特點,目的就是給抽象構件增加職責,對外表現為裝飾後的構件;

     讓裝飾角色擁有構件角色執行個體的目的就是讓構件能被多個裝飾對象來裝飾;

     在具體應用中可以靈活一點,不一定要有抽象構件和裝飾角色。但是,裝飾對象繼承裝飾對象並且擁有它執行個體的兩大特點需要體現;

     透明裝飾一般通過在基類方法前後進行擴充實現,半透明裝飾一般通過新的介面實現。

其它瀏覽

奇幻RPG(物品鍛造 與 Decorator模式)

.NET設計模式(10):裝飾模式(Decorator Pattern)

.Net中的設計模式——Decorator模式(此書作者的BLOG)

參考文章

9.Decorator(裝飾者模式)

設計模式學習筆記十五:裝飾模式(Decorator Pattern)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.