秒懂裝飾者模式

劍握在手發表於2017-06-01

 介面 A{

     統一的方法();

 

一個普通的繼承者

B 實現 A{

   統一的方法(){

 }

 

程式碼寫完了,五年之後B不夠用了,我們好幾個地方的程式碼用到B,直接在B裡新增方法,對既有的程式碼來說是冗餘的,

我們又想繼續用B裡的方法,我們可以直接寫個類繼承B,在裡面再新增方法,

裝飾模式也可以解決這種事情,但是用的不是繼承,而是:

 

C 實現 A{

   private A a;

   構造方法 C(A a1){

      a=a1;

  }

   

    統一的方法(){

      a.統一的方法();

 }

 

     新增的其他方法(){

    }

 

}

 

用的時候直接new 一個B,然後傳入C的構造方法,就可以通過C來用B的方法,C還可以有自己的方法。

 

 

定義:動態給一個物件新增一些額外的職責,就象在牆上刷油漆.相比用生成子類方式達到功能的擴充顯得更為靈活

設計初衷:通常可以使用繼承來實現功能的擴充,如果這些需要擴充的功能的種類很繁多,那麼勢必生成很多子類,增加系統的複雜性,同時,使用繼承實現功能擴充,我們必須可預見這些擴充功能,這些功能是編譯時就確定了,是靜態的。

相關文章