裝飾者模式學習

浪花一朵朵發表於2015-01-29

定義:

在不必改變原類檔案和使用繼承的情況下,動態地擴充套件一個物件的功能。它是通過建立一個包裝物件,也就是裝飾來包裹真實的物件。
 
 
如一個典型的應用場景,機房伺服器發生故障後,給使用者發郵件提醒,再又要加上簡訊提醒,提醒完成後再生成故障報表。
 
適用:
 
動態給類新增功能,還可以撤銷。
 
注意:
 
注意裝飾先後順序,如一個典型的應用場景,機房伺服器發生故障後,給使用者發郵件提醒,再又要加上簡訊提醒,提醒完成後再生成故障報表。若是不滿足發郵件的條件,就不用發簡訊和生成報表。最後執行的功能總是被最先裝飾。
 
 
裝飾模式結構:
核心在Decorator類上,
 
       protected Component component;
       public void SetDecorator(Component component)
       {
           this.component = component;
       }
       public override void Notice()
       {
           if (this.component!=null)
           {
               this.component.Notice();
           }
       }

也可以把裝飾邏輯放到具體的裝飾類上:

 protected Component component;
       public void SetDecorator(Component component)
       {
           this.component = component;
       }
把這一段放到具體的裝飾者類中。

ConcreteComponent讓Decorator物件為自己新增功能。有時候使用ConcreteComponent的派生類提供核心功能,在這種情況就是用ConcreteComponent替代了Component的功能,而且裝飾者是繼承於ConcreteComponent的子類。

  Component定義ConcreteComponent和Decorator類要實現的方法,簡單來說如果一個類繼承於該類就具有裝飾或被裝飾能力。 

  Decorator具有特定裝飾功能的類,用來裝飾ConcreteComponent類。

 

關於裝飾者模式,推薦閱讀:http://www.cnblogs.com/rush/archive/2011/05/08/Decorator_DesignPattern_NETFramework.html

 學習設計模式的最大體會就是如果能靈活運用到實際開發中去,說明就掌握了,所以一定要鄞練習,多思考。

demo下載.

 

 

相關文章