Re: [其他] 請教設計
※ 引述《luoqr (.....)》之銘言:
: 假設我有一個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的角色就有點像控制中心 去操作不同的介面....
: 只是在於不同的介面底下的實體可能需要的參數不同形態時有點難傳遞...@@
在這裡您說 A 的角色是控制中心,
去使用 B (某個 Action) 跟任意其他種的 X, Y, Z 功能。
我覺得較不明確的是 B, X, Y, Z 的操作對象都是同一個 Subject 嗎?
如果是的話,那不就只需要在它直接實作需要的 function 就好了?
class Subject{
function void b(m, n);
function void x(o);
function void y(s, t);
}
有什麼特殊的理由,要將 Subject 本身的責任委外出來呢?
如果硬要統一,那就會像:
class Subject {
function Object execute(Action, ...args)
}
abstract class Action {
function execute(Subject, ...args)
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.165.131
討論串 (同標題文章)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章