设计模式之迪米特法则
迪米特法则(Law of Demeter)
定义:一个类对其它类知道的越少越好
- 一个对象应该对其它对象尽可能少的了解
- 只和朋友通信,不和陌生人说话。
- 类与类之间的关系越密切,耦合度就越大。当一个类改变时,对另一个类的影响也很大。
迪米特法则应用的的设计模式: 门面模式,中介者模式。
public class School
{
private List<Class> ClassList = new List<Class>();
/// <summary>
/// 迪米特法则,不暴漏细节
/// </summary>
public void Manage()
{
foreach (var c in ClassList)
{
c.Manage();
}
}
/// <summary>
/// 违反迪米特法则,学校直接管理了学生,暴漏了过多细节
/// </summary>
public void ManageOther()
{
foreach (var c in ClassList)
{
foreach (var s in c.StudentList)
{
Console.WriteLine($"[Id:{s.Id}, Name:{s.Name}");
}
}
}
}
public class Class
{
private List<Student> _StudentList = new List<Student>();
/// <summary>
/// 开放数据访问,但不支持外部做数据更改,
/// 最好的做法是:不暴漏数据,只提供方法调用,不暴漏细节
/// </summary>
public List<Student> StudentList
{
get => _StudentList;
private set { _StudentList = value;}
}
public void Manage()
{
foreach (var s in StudentList)
{
Console.WriteLine($"[Id:{s.Id}, Name:{s.Name}");
}
}
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
总结:
- 去掉内部依赖,School不要直接管理Student, 也不关心细节
- 降低访问修饰符,避免暴漏过多细节
- 字段变属性:为了保护数据安全,也可以扩展逻辑控制。
网友评论