● 繼承

  ● 聚合

  ● 接口

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

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

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

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

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

  ● 面向抽象編程

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

  ● 封裝變化

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

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

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

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

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

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