C# 设计原则-迪米特法则(最少知识原则)

  迪米特法则(Law of Demeter)又叫最少知道原则(Interface Segregation 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产生依赖。

 

C# 设计原则-迪米特法则(最少知识原则)

上一篇:网页设计常用网页技巧


下一篇:记一次在virtualbox中安装windows7遇到增强功能安装分辨率的问题