介面 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還可以有自己的方法。
定義:動態給一個物件新增一些額外的職責,就象在牆上刷油漆.相比用生成子類方式達到功能的擴充顯得更為靈活。
設計初衷:通常可以使用繼承來實現功能的擴充,如果這些需要擴充的功能的種類很繁多,那麼勢必生成很多子類,增加系統的複雜性,同時,使用繼承實現功能擴充,我們必須可預見這些擴充功能,這些功能是編譯時就確定了,是靜態的。