看了一些設計模式跟物件導向的書,都會提到一個觀念就是
多用合成,少用繼承
之後,自己在寫程式時有嘗試著多使用合成去取代繼承
但是發現被合成物件(物件C、D)要取得合成物件(物件A)的資料時都會很不方便
EX.
// 物件A
class objectA{
public static shareResources;
public attr1;
public attr2;
public objectC; //合成的物件C
public objectD;
public function func1(){...}
public function func2(){...}
}
// 繼承物件A的物件B
class objectB extend objectA{
~~~~~~~~~~~~
~~~~~~~~~~~~
}
可能同樣的物件內容B跟C,但實際上當要取得物件A的資料時
物件B可以很直覺的直接使用物件A的屬性或間接使用方法來取得資料。
但物件C就很麻煩了,變成我可能必須在A Class的建構式中時就要把資料
想辦法塞到C物件,搞到後來變成當D物件也需要相同資料時,我又得重複
塞相同的資料到物件D。 暈!!
後來,我都是直接在物件A設了一個名為shareResources的陣列並宣告為Static,
再把所有共用資源都往那個陣列塞。
然後,無論合成物件或繼承物件都可以直接取用物件A的資料了。
不曉得做法好不好,有沒有大師提供更聰明的方法??