作者luoqr (.....)
看板OOAD
标题[其他] 请教设计
时间Fri Jul 2 16:23:30 2010
假设我有一个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
1F:推 goodGG :儿子 (C,D) 不能超过爸爸 (B) 07/02 17:54
2F:→ goodGG :说穿了,你的 interface 设计不好 07/02 17:56
3F:→ luoqr :我也是这麽想 但是B的介面要怎麽设计才能让C,D都合用 07/02 20:30
4F:→ luoqr :如果多了一个E, B是不是又要修改介面才能符合E Orz.. 07/02 20:31
5F:→ goodGG :没有一个设计可以应付所有可能 07/02 20:34
6F:推 goodGG :通常我会写 ConcreteB 实做 interface B 07/02 20:37
7F:→ goodGG :ConcreteB 由 C 及 D 及 E ... 组成 (而非继承) 07/02 20:38
8F:→ goodGG :interface常改表示..科科 07/02 20:39