1. 程式人生 > 實用技巧 >C# 設計原則-迪米特法則(最少知識原則)

C# 設計原則-迪米特法則(最少知識原則)

  迪米特法則(LawofDemeter)又叫最少知道原則(InterfaceSegregation Principle)。

  一個物件應該對其它物件有儘可能少的理解;比如有一個A類,A類肯定對自身的屬性和方法是熟悉的;如果A類的方法傳參的是B類,那麼A類對B類也是熟悉;在A類中直接例項化一個C類,那A類也是對C類熟悉。除此之外,A類就不應對其它類熟悉。

  如果要滿足迪米特法則,那麼就是儘可能少寫public方法和變數,不需要讓其它物件知道的變數或方法就不要公開。迪米特法則的主要目的是減少模組間的依賴,降低模組間的耦合度,提高程式碼的複用性。

  舉個例子,我們去飯店點菜,想要知道今天有什麼菜色可以點,一般是直接找服務員。

//服務員
public class Waiter
{
    public Menu menu = new Menu();
}

//選單
public class Menu
{
    public string Content { get; set; }
}

  顧客獲取選單資訊。

//顧客
public class People
{
    public void GetMenu()
    {
        Waiter waiter = new Waiter();
        Menu menu = waiter.menu;
        Console.WriteLine(menu.Content);
    }
}

  根據迪米特法則,People類是不應該獲得Menu類的相關內容,沒必要知道太多,這裡卻產生了依賴關係。我們應該進行修改,在Waiter類中不對外開放Menu類,通過Waiter的方法來提供Menu的資訊。

//服務員
public class Waiter
{
    //私有 不對外開放
    private Menu menu = new Menu();

    public String GetMenuContent()
    {
        return menu.Content;
    }
}

//顧客
public class People
{
    public void
GetMenu() { Waiter waiter = new Waiter(); Console.WriteLine(waiter.GetMenuContent()); } }

  這樣People就可以通過waiter的getMenuContent的方法來獲取Menu資訊,這樣可以避免People和Menu產生依賴。