[其他] 請教設計

看板OOAD作者 (.....)時間14年前 (2010/07/02 16:23), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/5 (看更多)
假設我有一個Class A 他包含一個叫 B 的這個介面來幫他做事情 class A{ B b ; } b 的實體可能是 C or D class C implements B class D implements B B 則提供一個function叫畫畫() 然後 C 實作畫圈圈 D 實作畫框框 現在我要來使用A這個類別 我會先指定要用哪個B實體: a.setB( new C() ) ; 或 a.setB( new D() ) ; 如果 C 在實作畫圈圈的時候需要某個參數 o D實作畫框框需要另一個參數 x o 和 x 的型態又不是相同的 ex: c.畫畫(){ 圈圈中間顯示名字, 名字是一個變數 } d.畫畫(){ 匡匡中間顯示日期, 日期也是一個變數 } 這樣我要怎麼把不同的參數給 A 好讓 A 去呼叫 b.畫畫() 時 可以把不同的參數給真正的實體 C or D? 還是說 只有在決定實體是誰的時候這個時間點給會比較適當? ex: new C("要顯示的名字") or new D( new Date() ) 如果是在決定實體是誰的時候給參數 那當 A 裡面的介面不只有 B 這一種 可能有 X,Y,Z... A 提供了一個統一的 function 去操作 B,X,Y,Z 這些介面的function ex: a.function(){ b.畫畫() ; x.紀錄() ; y.傳送圖片() ; } 會不會變成這些介面提供的function都不需要傳入參數 因為在決定實體的時候就都給好了? 是覺得function參數都是void挺怪的 不知道這樣的設計好不好? @@ PS. A的角色就有點像控制中心 去操作不同的介面.... 只是在於不同的介面底下的實體可能需要的參數不同形態時有點難傳遞...@@ -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.71.216.251

07/02 17:54, , 1F
兒子 (C,D) 不能超過爸爸 (B)
07/02 17:54, 1F

07/02 17:56, , 2F
說穿了,你的 interface 設計不好
07/02 17:56, 2F

07/02 20:30, , 3F
我也是這麼想 但是B的介面要怎麼設計才能讓C,D都合用
07/02 20:30, 3F

07/02 20:31, , 4F
如果多了一個E, B是不是又要修改介面才能符合E Orz..
07/02 20:31, 4F

07/02 20:34, , 5F
沒有一個設計可以應付所有可能
07/02 20:34, 5F

07/02 20:37, , 6F
通常我會寫 ConcreteB 實做 interface B
07/02 20:37, 6F

07/02 20:38, , 7F
ConcreteB 由 C 及 D 及 E ... 組成 (而非繼承)
07/02 20:38, 7F

07/02 20:39, , 8F
interface常改表示..科科
07/02 20:39, 8F
文章代碼(AID): #1CBQ85XI (OOAD)
文章代碼(AID): #1CBQ85XI (OOAD)