【发布时间】:2018-06-16 04:17:55
【问题描述】:
Object Thinking (by David West) 将协作定义为:
- 对象
A收到对其广告服务之一的请求- 在满足该请求的过程中,它需要向对象
B请求服务- 对象
B不是
- 一个对象占用了对象
A的实例变量之一- 在对象
A正在执行的方法中声明的临时变量,以满足原始请求- 提供给对象
A的对象,作为请求服务的消息的参数对象
B成为合作者,对象A的秘密助手。
但是,我很难想象这样的对象B。
在下面的代码片段中,helper1、helper2 或 helper3 都不匹配上面的定义,对吗?
我还认为它不是要调用B 的static 方法。
class A {
B helper1 = new B();
void service(B helper3) {
B helper2 = new B();
helper1.service();
helper2.service();
helper3.service();
}
}
谁能给我一个例子来说明这个定义在实践中的样子?
【问题讨论】:
-
所以书作者定义了一个 collaborator 对象,说它不是什么?没有其他信息?
-
您认为作者的意思不是 static 有什么原因吗?因为将
B作为 Singleton(但获取实例将使用 static)可能是合适的示例。 -
不,没有明确的例子说明它是什么。根据书中的信息,我会认为我的
helper1和helper2是合作者。这就是为什么这个定义让我感到困惑。 -
我认为作者的意思并不是像
B.staticService()这样的静态方法调用,因为IMO 这不符合书中所述的理念。将B定义为单例将IMO 意见等同于我的helper2,即临时变量。B.getInstance().service()等价于B helper2 = B.getInstance(); B.service()。