第五章
協作
什么是對象協作
?????
協作
是對象之間的相互請求。根據需要,一個對象向其他對象發出邀請或者與之協作,兩個對象默契配合履行更大的責任。(
P125
)
?
關于鄰域
???
當將具有共同責任的對象組織成“鄰域”時,需要細致的安排鄰里之間的協作關系以履行其更大的責任。同樣也要指定鄰域之外的對象如何與鄰域對象提供的服務進行交互。(
P126
)
?
使用對象契約
????????
使用對象契約說明對象如何交互是一種好的方式。當然也不必說出這些東西是如何實現的,契約描述了誰使用哪些責任(客戶契約)、聲明了在何種條件下使用這些責任(保證使用條件)及責任完成后的標志(保證執行效果),而完全忽略了實現細節。如果想清楚申明責任的預期用法和使用效果,那就得寫明契約。(
P131
)
?
?
如何確定對象協作
在確定協作的過程中,我們會使用如下的策略,或者說完成如下任務:
l????????
審視對象的構造型。
對象的構造型揭示了對象的本質,通過角色可以推測出對象與對象之間的協作關系。
l????????
審視個體責任
l????????
設計一個復雜責任的細節
l????????
為特定的用例和事件設計協作
l????????
尋求組織通信的方式
l????????
尋求更為簡化的方法
?
?
2007
年
3
月
24
日星期六
?
??? P133
一旦確認對象之間為履行一系列大型責任而相互協作的關系之后,我們將開始更為精確的工作:記錄下對象是怎樣意識到周圍的協作者的,并開發協作所需的通信消息序列及其參數和返回值。
?
審視個體對象的角色:構造型隱含協作
構造型為協作提供了一定的線索,如:服務提供者與控制者需要其它對象為其提供信息,而協調者與接口則需要服務,構造者從事組織其他對象的工作。
?
1
、信息持有者
信息持有者的職責:
l????????
主要是持有并保證信息的一致性
l????????
也可能經常向其他對象尋求信息
?
千萬不要認為若一個對象有了解某種信息的責任,則其必然具有持有該信息的責任,請記住,對象在任何需要要信息的時候,都可以向其他持有該信息的對象尋求幫助。
?
2
、構造者
聚合關系表示:一個整體對象(如,構造者)有責任管理其組成部分(組合在一起的對象)。
復合
關系表示:部分只能依附于整體存在,其不能單獨存活。
?
3
、服務提供者
與專業技術或計算相關的責任應被分配到服務提供者角色中。
?
4
、控制者
控制者與協調者之間的區別在于度。控制者分析事務并采取相應的行為;而協調者之被告知如何做,本身幾乎不做任何決策。
?
5
、協調者
協調者的存在僅僅是為了傳遞消息并驅動其他對象的行為。
?
協調者與構造者一樣,維護與其他對象的連接,不過二者的目的不同。協調者主要是協調一組“工人對象”的行為,而構造者將其管理的一組對象組合起來,對外界形成一個整體形象。
?
?
6
、接口
接口是本來相互脫離的事物之間的橋梁。
?
?
審視個體責任:它們隱含著協作
個人責任分為
3
大種類:知、行和決策。