这篇文章距离最后更新已过100 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
定义
- 又叫最少知识法则
- 只与你的直接朋友交谈,不跟陌生人说话
- 如果两个软件实体无须直接通信,那么就不应当直接相互调用,可以通过第三方转发该调用
强调
- 从依赖者角度来说,只依赖应该依赖的对象
- 从被依赖者的角度来说,只暴露应该暴露的方法
- 门面模式和调停者模式(中介者模式)是迪米特法则的应用
使用场景
- 明星与经纪人的关系实例
- 明星只负责艺术,其他业务(粉丝见面会、媒体公司洽谈)交由经纪人处理
- 明星与经纪人是朋友,明星与媒体公司和粉丝是陌生人
代码实现
// 经纪人
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();
}
}
优点与缺点
- 类间解耦,弱耦合,提高类的复用率
- 造成系统不同模块之间的通信效率变低,不同模块之间不容易协调
- 容易导致大量的中介类,大大增加复杂度(可使用依赖倒转原则解决,在调用方和被调用方有一个抽象层)