天天看點

面向對象設計原則——迪米特法則

        迪米特法則(Law of Demeter, LoD):一個軟體實體應當盡可能少地與其他實體發生互相作用。

        如果一個系統符合迪米特法則,那麼當其中某一個子產品發生修改時,就會盡量少地影響其他子產品,擴充會相對容易,這是對軟體實體之間通信的限制,迪米特法則要求限制軟體實體之間通信的寬度和深度。迪米特法則可降低系統的耦合度,使類與類之間保持松散的耦合關系。

迪米特法則還有幾種定義形式,包括:不要和“陌生人”說話、隻與你的直接朋友通信等,在迪米特法則中,對于一個對象,其朋友包括以下幾類:

  • 目前對象本身(this);
  • 以參數形式傳入到目前對象方法中的對象;
  • 目前對象的成員對象;
  • 如果目前對象的成員對象是一個集合,那麼集合中的元素也都是朋友;
  • 目前對象所建立的對象。

         任何一個對象,如果滿足上面的條件之一,就是目前對象的“朋友”,否則就是“陌生人”。在應用迪米特法則時,一個對象隻能與直接朋友發生互動,不要與“陌生人”發生直接互動,這樣做可以降低系統的耦合度,一個對象的改變不會給太多其他對象帶來影響。

         迪米特法則要求我們在設計系統時,應該盡量減少對象之間的互動,如果兩個對象之間不必彼此直接通信,那麼這兩個對象就不應當發生任何直接的互相作用,如果其中的一個對象需要調用另一個對象的某一個方法的話,可以通過第三者轉發這個調用。簡言之,就是通過引入一個合理的第三者來降低現有對象之間的耦合度。

        在将迪米特法則運用到系統設計中時,要注意下面的幾點:在類的劃分上,應當盡量建立松耦合的類,類之間的耦合度越低,就越有利于複用,一個處在松耦合中的類一旦被修改,不會對關聯的類造成太大波及;在類的結構設計上,每一個類都應當盡量降低其成員變量和成員函數的通路權限;在類的設計上,隻要有可能,一個類型應當設計成不變類;在對其他類的引用上,一個對象對其他對象的引用應當降到最低。

繼續閱讀