七、面向對象設計模式之迪米特法則

迪米特法則(Law of Demeter或簡寫LOD)又叫最少知識原則(LeastKnowledge Principle或簡寫(LKP),也就是說,一個對象應當對其餘對象有儘量少的瞭解。其餘描述:設計模式

  只與你直接的朋友通訊,不要跟」陌生人「說話。每一個軟件單位對其它的單位都只有最少的知識,並且侷限於那些與本單位密切相關的軟件單位。函數

  迪米特法則與設計模式:優化

  Facade(外觀) 模式、Mediator(中介者)模式spa

    (1) 不要和」陌生人「說話,英文定義爲:Do can't talk to strangers.設計

    (2)只與你的直接朋友通訊。英文定義爲:Talk only to your immediate friends.對象

    (3)每一個軟件單位對其餘的單位都只有最少的知識,並且侷限於那些與基本單位密切相關的軟件單位。英文定義爲:Each unit should have only limited knowledge about other units "closely" related to the current unit.接口

迪米特法則首先強調的前提是在類的結構設計上,每一個類都應當儘可能下降成員的訪問權限,即一個類包裝好本身的private狀態,不要讓別類知道的字段或行爲就不要公開。須要公開的字段一般就用屬性來體現。ip

面向對象的設計原則和麪向對象的三大特性本就不是矛盾的。迪米特法則其根本思想是強調了在類之間的鬆耦合。如一天去一家公司,IT部的同事都不認識,你只要打個電話給IT叫IT部來修電腦便可,不須要認識IT裏的全部同事。因爲IT部相似於抽象的類或接口,哪怕該部門換了新人,你仍然能夠聯繫IT部的新同事來修電腦。從而避免了」人際關係「辦事的狀況發生。ci

  在程序設計時,類之間的耦合越弱,越有利於複用,一個處在弱耦合的類被修改,不會對有關係的類形成影響。即信息的隱藏促進了代碼的複用。開發

例子:

  使民無知:《老子》第三章曰:」是聖人之治,虛其心,實其腹,弱其志,常使民無知無慾。「使被」統治的對象「愚昧」化,處於「無知」的狀態,可使「統治」的成本下降。所謂「最小知識」原則,實際上即是老子的「使民無知」的統治之術。

  不相往來:《老子》雲:「小國寡民......鄰國相望,雞犬之聲相聞,民至老死,不相往來。」將被統治的對象隔離開來,是他們沒有直接的通訊,能夠達到分化瓦解,繼而分而治之的效果。迪米特法則與老子的「小國寡民」的統治之術不謀而合。

  在迪米特法則中,對於一個對象,其朋友包括如下幾類:

  (1)當前對象自己

  (2)以參數形式傳入當前對象方法中的對象

  (3)當前對象的成員對象

  (4)若是當前對象的成員對象是一個集合,那麼集合中的元素也都是朋友;

  (5)當前對象建立的對象。

  任何一個對象知足上面的條件之一,就是當前對象的朋友,不然就是陌生人。

 

迪米特法則來自於1987年秋美國東北大學(Northeastern University)一個名爲「Demeter」的研究項目

簡單的說,迪米特法則就是指一個軟件實體應當儘量少的與其餘實體發生相互做用。這樣當一個模塊修改時,就會盡可能少的影響其餘的模塊,擴展會相對容易,這是對軟件實體之間通訊的限制,要求限制軟件實體之間通訊的寬度和深度。

狹義的迪米特法則:能夠下降類之間的耦合,可是會在系統中增長大量的小方法並散落在系統的各個角落,它可使一個系統的局部設計簡化,由於每一個局部都不會和遠離的對象有直接的關聯,但也會形成系統的不一樣模塊之間的通訊效率下降,使得系統的不一樣模塊不容易協調。在狹義的迪米特法則中,若是兩個類之間沒必要彼此直接通訊,那麼這兩個類就不該當發生直接的相互做用,若是其中一個類須要調用另外一個類的某個方法的話,能夠經過第三者轉發這個調用。

廣義的迪米特法則:指對對象之間的信息流量、流向以及信息的影響的控制,主要是對信息隱藏的控制。信息的隱藏可使各個子系統之間脫耦,從而容許它們獨立地被開發、優化、使用和修改,同時能夠促進軟件的複用,因爲每一個模塊都不依賴於其餘的模塊存在,所以每一個模塊均可以獨立的在其它地方使用。一個系統的規模越大,信息的隱藏就越重要,而信息的隱藏重要性也就越明顯。

迪米特法則的主要用途就是控制信息的過載:

  在類的劃分上,應當儘可能建立鬆耦合的類,類之間耦合度越低,就越有利於複用,一個處在鬆耦合的類一旦被修改,不會對關聯的類形成太大的波及;在類的結構設計上,每一個類都應當儘可能下降其成員變量和成員函數的訪問權限;

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

  在對其餘類的引用上,一個對象對其餘對象的引用應當降到最低。

相關文章
相關標籤/搜索