設計模式 迪公尺特法則

2021-08-27 01:12:36 字數 1907 閱讀 4023

一,概述

迪公尺特法則(law of demeter)又叫作最少知識原則(least knowledge principle 簡寫lkp),就是說乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。英文簡寫為: lod

如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接相互作用。。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。

在類的架構上,每乙個類都應盡量降低成員的訪問許可權(private)。類之間的松耦合越弱,越容易復用,就是說處在弱耦合中的類容易被修改。

二,示例

形象一點的比喻類似於:監獄內的犯人是不應該跟外面的人接觸的,當然或許會有探親的。這裡的監獄就是類,裡面的犯人就是類內部的資訊,而監獄裡的獄警就相當於迪公尺特法則的執行者

例:家人探望犯人

家人:家人只與犯人是親人,但是不認識他的獄友

publicclassfamily

}

犯人:犯人與家人是親人,犯人與獄友是朋友

publicclassprisoners

}

獄友:犯人與獄友是朋友,但是不認識他的家人

//inmates是獄友的意思

publicclassinmates

}

場景類:發生在監獄裡

publicclassprison

}

執行結果:

家人說:你和獄友之間應該互相幫助...

獄友說:我們是獄友...

看到這樣的結果,是不是有些彆扭,家人告訴犯人要與獄友好好相處,而獄友確冒出來說話。這顯然越界了,因為監獄只允許家人探望犯人,而不是隨便誰都可以見的

這裡的家人和獄友有了溝通是違背迪公尺特法則的,所以我們需要將家人和獄友隔離開,對其進行重構 家人

publicclassfamily

}

犯人publicclassprisoners

}

獄友//inmates是獄友的意思

publicclassinmates

}

監獄publicclassprison

}

執行結果

家人說:犯人和獄友之間應該互相幫助...

犯人說:我們是獄友...

這樣家人和獄友就分開了,但是也表達了家人希望獄友能跟犯人互相幫助的意願。也就是兩個類通過第三個類(家人裡面的犯人)實現資訊傳遞

① 在類的劃分上,應該建立有弱耦合的類;

② 在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權;

③ 在類的設計上,只要有可能,乙個類應當設計成不變類;

④ 在對其他類的引用上,乙個物件對其它物件的引用應當降到最低;

⑤ 盡量降低類的訪問許可權;

⑥ 謹慎使用序列化功能;

⑦ 不要暴露類成員,而應該提供相應的訪問器(屬性)。

設計模式 迪公尺特法則

設計模式 迪公尺特法則 only talk to your immediate friends 只與直接的朋友通訊。即每個物件都有耦合關係,物件之間有耦合。定義老師類 public class teacher 然後進行查詢任務 groupleader.countgirls listgirls 然後定...

設計模式 迪公尺特法則 Lod LKP

迪公尺特法則 law of demeter,lod 也稱最少知識原則 least knowledge principle,lkp 理解 如果兩個類不必彼此直接通訊,那麼這兩個類就不應該發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個放發的話,可以通過第三者 這個呼叫。每個物件都必然會與其他...

設計模式系列 迪公尺特法則

問題由來 類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類的影響也越大。解決方案 盡量降低類與類之間的耦合。自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模組之間的耦合盡量的低,才能提高 的復用率。低...