閱讀94 返回首頁    go 微軟 go windows


設計模式六大原則--迪米特法則

       背景

       在學校學習時,可能因為某些事你得去其他二級學院的老師幫忙,大部分老師都是忙的(也許是的)很可能一件小事你要跑很多次。但是如果你這件事直接找的是其他學院的院長,並且院長同意幫忙的話這件事解決起來就容易多了。不知怎地最近老是瞎想感覺這件事又能和設計模式中的迪米特法則(Law of Demeter,LOD),也叫最少知識原則(Least Knowledge Principle,LKP)扯上關係,接下來就由小生帶大家粗略的了解一下這個法則吧。

       定義

       如果兩個類不必批次直接通信,那麼這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用。

       詳細說明

       迪米特法則首相強調的前提是在列的結構設計上,每一個類都應當盡量降低成員的訪問權限,也就是說一個列包裝好自己的private狀態,不需要讓別人的類知道的字段或行為就不要公開。

       迪米特法則其根本思想是強調類之間的鬆耦合。我們在程序設計時,類之間的耦合越弱,也有利於複用,一個處在弱耦合的類被修改,不會對有關係的類造成波及。也就是說隱藏信息促進了代碼的複用。

       如果兩個類不必彼此直接通信,那麼就不要讓這兩個類發生直接的相互作用。具體做法就是引入一個外觀對象,它為子係統提供了一個單一而簡單的屏障從而使子係統間的通信和相互依賴關係達到最小。

       示例(設計模式中的外觀(門麵)模式)

 //客戶端代碼
    class Program
    {
        static void Main(string[] args)
        {
            Facade facade = new Facade();
            facade.MethodA();
            facade.MethodB();
            Console.Read();
        }
    }
    //類似的代碼可以建立多個係統子方法
    class SubSystemOne
    {
        public void MethodOne()
        {
            //...方法一
        }
    }  
    class Facade
    {
        SubSystemOne one;     //可以有多個子係統
        public Facade()
        {
            one = new SubSystemOne();
            //...
        }
        public void MethodA()
        {
            Console.WriteLine("\n方法組A() --- ");
            one.MethodOne();
            //...
        }
        public void MethodB()
        {
            Console.WriteLine("\n方法組B() --- ");
            two.MethodTwo();
            //...
        }
    }

       優劣

       優點

       總結成一句話就是降低了類之間的耦合,減少了類之間不必要的依賴。

       缺點

       係統裏造出大量的小方法,這些方法僅僅是傳遞間的調用,與係統的商務邏輯無關。遵循類之間的迪米特法則是一個係統的局部設計的簡化,因為每一個局部都不會和遠距離的對象有直接的關聯。但是,這也造成係統的不同模塊之間的通信效率降低,也會使係統的不同模塊之間不容易協調。


最後更新:2017-04-03 12:55:07

  上一篇:go JavaBean 反射機製實現自動配置數據
  下一篇:go 百度地圖之標注聚會