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