C# 設計原則-迪米特法則(最少知識原則)
阿新 • • 發佈:2020-12-31
迪米特法則(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 voidGetMenu() { Waiter waiter = new Waiter(); Console.WriteLine(waiter.GetMenuContent()); } }
這樣People就可以通過waiter的getMenuContent的方法來獲取Menu資訊,這樣可以避免People和Menu產生依賴。