第五章
协作
什么是对象协作
协作
是对象之间的相互请求。根据需要,一个对象向其他对象发出邀请或者与之协作,两个对象默契配合履行更大的责任。(
P125
)
关于邻域
当将具有共同责任的对象组织成“邻域”时,需要细致的安排邻里之间的协作关系以履行其更大的责任。同样也要指定邻域之外的对象如何与邻域对象提供的服务进行交互。(
P126
)
使用对象契约
使用对象契约说明对象如何交互是一种好的方式。当然也不必说出这些东西是如何实现的,契约描述了谁使用哪些责任(客户契约)、声明了在何种条件下使用这些责任(保证使用条件)及责任完成后的标志(保证执行效果),而完全忽略了实现细节。如果想清楚申明责任的预期用法和使用效果,那就得写明契约。(
P131
)
如何确定对象协作
在确定协作的过程中,我们会使用如下的策略,或者说完成如下任务:
l
审视对象的构造型。
对象的构造型揭示了对象的本质,通过角色可以推测出对象与对象之间的协作关系。
l
审视个体责任
l
设计一个复杂责任的细节
l
为特定的用例和事件设计协作
l
寻求组织通信的方式
l
寻求更为简化的方法
2007
年
3
月
24
日星期六
P133
一旦确认对象之间为履行一系列大型责任而相互协作的关系之后,我们将开始更为精确的工作:记录下对象是怎样意识到周围的协作者的,并开发协作所需的通信消息序列及其参数和返回值。
审视个体对象的角色:构造型隐含协作
构造型为协作提供了一定的线索,如:服务提供者与控制者需要其它对象为其提供信息,而协调者与接口则需要服务,构造者从事组织其他对象的工作。
1
、信息持有者
信息持有者的职责:
l
主要是持有并保证信息的一致性
l
也可能经常向其他对象寻求信息
千万不要认为若一个对象有了解某种信息的责任,则其必然具有持有该信息的责任,请记住,对象在任何需要要信息的时候,都可以向其他持有该信息的对象寻求帮助。
2
、构造者
聚合关系表示:一个整体对象(如,构造者)有责任管理其组成部分(组合在一起的对象)。
复合
关系表示:部分只能依附于整体存在,其不能单独存活。
3
、服务提供者
与专业技术或计算相关的责任应被分配到服务提供者角色中。
4
、控制者
控制者与协调者之间的区别在于度。控制者分析事务并采取相应的行为;而协调者之被告知如何做,本身几乎不做任何决策。
5
、协调者
协调者的存在仅仅是为了传递消息并驱动其他对象的行为。
协调者与构造者一样,维护与其他对象的连接,不过二者的目的不同。协调者主要是协调一组“工人对象”的行为,而构造者将其管理的一组对象组合起来,对外界形成一个整体形象。
6
、接口
接口是本来相互脱离的事物之间的桥梁。
审视个体责任:它们隐含着协作
个人责任分为
3
大种类:知、行和决策。