迪米特法則(LoD):又稱最少知識原則(LKP),就是說一個對象應(yīng)當(dāng)對其他對象盡可能少的了解。
狹義的迪米特法則:
如果兩個類不必彼此直接通信,那么這兩個類就不應(yīng)當(dāng)發(fā)生直接的相互作用.如果其中一個類需要調(diào)用另一個類的方法的話,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用.
缺點:
會在系統(tǒng)內(nèi)造出大量的小方法,散落在系統(tǒng)的各個角落.這些方法僅僅是傳遞間接的調(diào)用,因此系統(tǒng)與系統(tǒng)中的商業(yè)邏輯無關(guān).當(dāng)設(shè)計師試圖從一張類圖看出總體的構(gòu)架時,這些小方法會造成迷惑和困擾.
為了克服狹義迪米特法則的缺點,可以使用依賴倒轉(zhuǎn)原則,引入一個抽象的類型引用"抽象陌生人"對象,使"某人"依賴于"抽象陌生人",換言之,就是將"抽象陌生人"變成朋友.
廣義的迪米特法則:
一個模塊設(shè)計得好壞的一個重要的標志就是該模塊在多大的程度上將自己的內(nèi)部數(shù)據(jù)與實現(xiàn)有關(guān)的細節(jié)隱藏起來.
信息的隱藏非常重要的原因在于,它可以使各個子系統(tǒng)之間脫耦,從而允許它們獨立地被開發(fā),優(yōu)化,使用閱讀以及修改.
迪米特法則的主要用意是控制信息的過載.在運用迪米特法則到系統(tǒng)的設(shè)計中時,要注意以下幾點:
* 在類的劃分上,應(yīng)當(dāng)創(chuàng)建有弱耦合的類.類之間的耦合越弱,就越有利于復(fù)用.
* 在類的結(jié)構(gòu)設(shè)計上,每一個類都應(yīng)當(dāng)盡量降低成員的訪問權(quán)限.
* 在類的設(shè)計上,只要可能,一個類應(yīng)當(dāng)設(shè)計成不變類.
* 在對其他類的引用上,一個對象對其他對象的引用應(yīng)降到最低.
* 盡量限制局部變量的有效范圍.