裝飾(包裝)模式

意圖
裝飾模式可在不改變原有對象的行為下,擴展其行為;
提供了比繼承更有彈性的替代方案;

動態地給一個對象添加一些額外的職責;

別名:包裝器(Wrapper)模式

來自Head First

  1. 裝飾者和被裝飾對象有相同的類型,這樣客戶端對象就可以用和真實對象相同的方式和裝飾對象交互;
  2. 可用一個或多個裝飾者包裝一個對象;
  3. 在任何需要原始對象(被包裝)的場合,可用裝飾過的對象代替它(擴展原始對象的行為);
  4. 裝飾者可在所委托被裝飾者的行為之前或之后,加上裝飾后的行為,以達到目的;
  5. 對象可在任何時候,被裝飾,所以可以在運行時動態地、不限量的裝飾者來裝飾對象;
    6.裝飾對象包含一個真實對象的引用;

示例類圖:

Paste_Image.png

也可以將 被包裝的類,放入 Decorator基類中,并設置成 protected類型的變量,這樣做,其實更好,子類,就不需要維護 wrapped 對象了;

Paste_Image.png

裝飾者模式中的角色

  1. 被裝飾者抽象(Component):是一個抽象接口,或抽象類,也是該模式中的最元素的對象了;
  2. 被裝飾者具體實現(ConcreteComponent),也是上圖中的ComponentA;
    要裝飾的就是這個具體的實現類,可以有多個,具體實現類,如: java io 體系;
  3. 裝飾者基類(Decorator)可以是一個抽象類,或者類,用來實現被裝飾者抽象(Component)中的方法,實現是通過 Componet 對象的引用來實現的;
  4. 裝飾者實現,如上圖中的(DecoratorA 與 DecoratorB)是具體的裝飾者類,用來裝飾最基本的類,如:ComponentA;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 場景問題# 1.1 復雜的獎金計算## 考慮這樣一個實際應用:就是如何實現靈活的獎金計算。 獎金計算是相對復雜...
    七寸知架構閱讀 4,057評論 4 67
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,983評論 1 15
  • 最近在學習MyBatis框架原理的時候,發現其實現二級緩存的過程中運用到了裝飾者模式,所以來深入了解一下 介紹 裝...
    就沒一個昵稱能用閱讀 747評論 0 5
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評論 18 399
  • 本篇文章介紹一種設計模式——裝飾者模式。裝飾者模式在Java中的典型應用就是IO流,在本篇文章中將有詳細介紹。本篇...
    Ruheng閱讀 22,309評論 13 56