定义

  1. 又叫最少知识法则
  2. 只与你的直接朋友交谈,不跟陌生人说话
  3. 如果两个软件实体无须直接通信,那么就不应当直接相互调用,可以通过第三方转发该调用

强调

  1. 从依赖者角度来说,只依赖应该依赖的对象
  2. 从被依赖者的角度来说,只暴露应该暴露的方法
  3. 门面模式调停者模式(中介者模式)是迪米特法则的应用

使用场景

  1. 明星与经纪人的关系实例
  2. 明星只负责艺术,其他业务(粉丝见面会、媒体公司洽谈)交由经纪人处理
  3. 明星与经纪人是朋友,明星与媒体公司和粉丝是陌生人

代码实现

// 经纪人
public class Agent
{
    private Star _star;
    private Fans _fans;
    private Company _company;
      public void SetStar(Star star)
    {
        _star = star;
    }

    public void SetFans(Fans fans)
    {
        _fans = fans;
    }

    public void SetCompany(Company company)
    {
        _company = company;
    }

    public void Business()
    {
        Console.WriteLine("{0}与{1}公司进行洽谈", _star.Name, _company.Name);
    }

    public void Meeting()
    {
        Console.WriteLine("{0}与{1}粉丝团见面",_star.Name,_fans.Name);
    }
}

//明星
public class Star
{
    public string Name { get; set; }
}

//粉丝团
public class Fans
{
    public string Name { get; set; }
}

//媒体公司
public class Company
{
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Star star = new Star { Name = "成龙" };
        Company company = new Company { Name = "中国影视协会" };
        Fans fans = new Fans { Name = "博龙" };

        Agent agent = new Agent();
        agent.SetStar(star);
        agent.SetFans(fans);
        agent.SetCompany(company);

        agent.Meeting();
        agent.Business();
    }
}  

优点与缺点

  1. 类间解耦,弱耦合,提高类的复用率
  2. 造成系统不同模块之间的通信效率变低,不同模块之间不容易协调
  3. 容易导致大量的中介类,大大增加复杂度(可使用依赖倒转原则解决,在调用方和被调用方有一个抽象层)