[設計] 多用合成,少用繼承

看板OOAD作者 (internaltide)時間10年前 (2014/03/15 18:50), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/4 (看更多)
看了一些設計模式跟物件導向的書,都會提到一個觀念就是 多用合成,少用繼承 之後,自己在寫程式時有嘗試著多使用合成去取代繼承 但是發現被合成物件(物件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的資料了。 不曉得做法好不好,有沒有大師提供更聰明的方法?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.190.152

03/15 22:38, , 1F
一看到 static 就大概可以預期99.9%是錯的手法
03/15 22:38, 1F

04/11 11:43, , 2F
這code不像Composite,可以到wiki看文章
04/11 11:43, 2F

04/11 11:46, , 3F
少了Common的Interface,只是單純宣告物件
04/11 11:46, 3F
文章代碼(AID): #1J931WHI (OOAD)
文章代碼(AID): #1J931WHI (OOAD)