飞客 - 最少知识法则
type: channel
link: https://achmydream.com/tag/%E6%9C%80%E5%B0%91%E7%9F%A5%E8%AF%86%E6%B3%95%E5%88%99/
items: 11. 迪米特法则

11. 迪米特法则
type: item
date: 2025-10-07T12:25:14+08:00
description: 定义又叫最少知识法则只与你的直接朋友交谈，不跟陌生人说话如果两个软件实体无须直接通信，那么就不应当直接相互调用，可以通过第三方转发该调用强调从依赖者角度来说，只依赖应该依赖的对象从被依赖者的角度来说，只暴露应该暴露的方法门面模式和调停者模式（中介者模式）是迪米特法则的应用使用场景明星与经纪人的关系实例明星只负责艺术，其他业务（粉丝见面会、媒体公司洽谈）交由经纪人处理明星与经纪人是朋友，明星与媒体公司和粉丝是陌生人代码实现// 经纪人 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(); } } 优点与缺点类间解耦，弱耦合，提高类的复用率造成系统不同模块之间的通信效率变低，不同模块之间不容易协调容易导致大量的中介类，大大增加复杂度（可使用依赖倒转原则解决，在调用方和被调用方有一个抽象层）