● 繼承

  ● 聚合

  ● 接口

  ● 方法調(diào)用和引用

  ● 服務(wù)調(diào)用

  了解了耦合發(fā)生的一般方式,可以進(jìn)入核心思想的討論,那是在認(rèn)識(shí)和了解依賴(lài)的基礎(chǔ)上,終追求的目標(biāo)。

  話(huà)說(shuō)設(shè)計(jì)的目標(biāo):高內(nèi)聚(High cohesion)、低耦合(Low coupling)。

  討論了半天,終于是時(shí)候?qū)σ蕾?lài)和耦合進(jìn)行一點(diǎn)兒總結(jié)了,也是該進(jìn)行一點(diǎn)目標(biāo)訴求了。在軟件設(shè)計(jì)領(lǐng)域,有那么幾個(gè)至高原則值得每個(gè)開(kāi)發(fā)者銘記于心,它們是:

  ● 面向抽象編程

  ● 低耦合,高內(nèi)聚

  ● 封裝變化

  ● 實(shí)現(xiàn)重用:代碼重用、算法重用

  對(duì)了,是這些平凡的字眼,匯集了面向?qū)ο笏枷氲暮诵膬?nèi)容,也是本文力求闡釋的禪意心經(jīng)。關(guān)于面向抽象編程和封裝變化,會(huì)在后面詳細(xì)闡釋?zhuān)诖宋覀冃枰獙⒆⒁饬﹃P(guān)注于“低耦合,高內(nèi)聚”這一目標(biāo)。

  低耦合,代表了實(shí)現(xiàn)簡(jiǎn)單的依賴(lài)關(guān)系,盡可能地減少類(lèi)與類(lèi)、模塊與模塊、層次與層次、系統(tǒng)與系統(tǒng)之間的聯(lián)系。低耦合,體現(xiàn)了人類(lèi)追求簡(jiǎn)單操作的理想狀態(tài),按照軟件開(kāi)發(fā)的基本實(shí)現(xiàn)技巧來(lái)追求軟件實(shí)體之間的關(guān)系簡(jiǎn)單化,正是大部分設(shè)計(jì)模式力圖追求的目標(biāo);低耦合,降低了一個(gè)類(lèi)或一個(gè)模塊發(fā)生修改對(duì)其他類(lèi)或模塊造成的影響,將影響范圍簡(jiǎn)單化。在本文闡釋的依賴(lài)關(guān)系方式中,實(shí)現(xiàn)單向的依賴(lài),實(shí)現(xiàn)抽象的耦合,都是實(shí)現(xiàn)低耦合的基礎(chǔ)條件。

  高內(nèi)聚,一方面代表了職責(zé)的統(tǒng)一管理,一方面體現(xiàn)了關(guān)系的有效隔離。例如單一職責(zé)原則其實(shí)歸根結(jié)底是對(duì)功能性的一種指導(dǎo)性體現(xiàn),將功能緊密聯(lián)系的職責(zé)封裝為一個(gè)類(lèi)(或模塊),而判斷的準(zhǔn)則正是基于引起類(lèi)變化的原因。所以,封裝離不開(kāi)依賴(lài),而抽象離不開(kāi)變化,二者的概念和本質(zhì)都是相對(duì)而言的。因此,高內(nèi)聚的目標(biāo)體現(xiàn)了以隔離為目標(biāo)進(jìn)行統(tǒng)一管理的思想。

  那么,為了達(dá)到低耦合、高內(nèi)聚的目標(biāo),通常意義上的設(shè)計(jì)原則和設(shè)計(jì)模式其實(shí)都是朝著這個(gè)方向?qū)崿F(xiàn)的,因此僅僅總結(jié)并非普遍意義的規(guī)則:

  ● 盡可能實(shí)現(xiàn)單項(xiàng)依賴(lài)。

  ● 不需要進(jìn)行數(shù)據(jù)交換的雙方,不要實(shí)現(xiàn)多此一舉的關(guān)聯(lián),人們將此形象稱(chēng)為“不要向陌生人說(shuō)話(huà)(Don‘t talk to strangers)”。

  ● 保持內(nèi)部的封裝性,關(guān)聯(lián)的雙方不要深入實(shí)現(xiàn)細(xì)節(jié)進(jìn)行通信,這是保證高內(nèi)聚的必需條件。