[設(shè)計(jì)原則]迪米特法則

迪米特法則(LOD)也稱為最少知識(shí)原則(LKP),雖然名字不同,但描述的是同一個(gè)規(guī)則:

  • 一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解。通俗地講,一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少。

迪米特法則對(duì)類的低耦合提出了明確的要求,其包含以下4層含義:

  • 只與直接的朋友通信。什么要做直接的朋友呢?每個(gè)對(duì)象者必然會(huì)與其他對(duì)象有耦合關(guān)系,兩個(gè)對(duì)象之間的耦合就成為朋友關(guān)系,這種關(guān)系的類型有很多,例如:組合、聚合、依賴等。
  • 朋友間也是有距離的,一個(gè)類公開的public屬性或方法越多,修改時(shí)涉及的面也就越大,變更引起的風(fēng)險(xiǎn)擴(kuò)散也就越大。因此,為了保持朋友類之間的距離,在設(shè)計(jì)時(shí)需要反復(fù)衡量:是否還可以再減少public方法和屬性,是否可以修改為private、package-private(包類型,在類、方法、變量前不加訪問權(quán)限,則默認(rèn)為包類型)、protected等訪問權(quán)限,是否可以加上final關(guān)鍵詞等。

迪米特法則要求類盡量不要對(duì)外公布太多的public方法和非靜態(tài)的public變量,盡量?jī)?nèi)斂,多使用privatepackage-privateprotected等訪問權(quán)限

  • 是自己的就是自己的,如果一個(gè)方法放在本類中,既不增加類間的關(guān)系,也對(duì)本來不產(chǎn)生負(fù)面影響,那就放置在本類中。
  • 謹(jǐn)慎使用Serializable

迪米特法則的核心觀念就是類間的解耦,弱耦合了以后,類的復(fù)用率才可以提高。其要求的結(jié)果就是產(chǎn)生了大量的中轉(zhuǎn)或跳轉(zhuǎn)類,導(dǎo)致系統(tǒng)的復(fù)雜性提高,同時(shí)也為維護(hù)帶來難度。采用迪米特法則時(shí)需要反復(fù)權(quán)衡,既做到讓結(jié)構(gòu)清晰,又做到高內(nèi)聚低耦合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容