迪米特法则
2023/11/29大约 9 分钟
迪米特法则
又叫最少知道原则,一个实体应当尽量少的与其它实体发生相互作用,使得功能模块相互独立,要求一个对象应该对其他对象有尽可能少的了解,它应该只与紧密相关的对象进行交互。
换句话说,一个对象不应该直接与陌生对象通信,而是通过中间对象进行间接交互。这样可以**降低对象之间的耦合性,提高代码的可维护性和可测试性 **。
迪米特法则强调模块之间应该尽量减少彼此的依赖,一个对象应该对其他对象有尽可能少了解。迪米特法则 有助于降低系统的耦合性,提高模块的独立性和可维护性。
解释:
- 从依赖者的角度来说,只依赖应该依赖的对象。
- 从被依赖者的角度说,只暴露应该暴露的方法。
- 在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。
- 在类的结构设计上,尽量降低类成员的访问权限。
- 在类的设计上,优先考虑将一个类设置成不变类。
- 在对其他类的引用上,将引用其他对象的次数降到最低。
- 不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。
举例说明
这里通过一个例子对迪米特法则进行说明。例如:
有两个类:Person 和 Team。
Person类表示一个人,具有一个私有的姓名属性和一个公有的getName方法用于获取人的姓名。Team类表示一个团队,具有一个私有的成员数组属性(类型为Person[]),以及公有的addMember方法用于添加成员,和printTeamMembers方法用于打印团队成员的姓名。
创建两个 Person 对象:john 和 jane,创建一个 Team 对象 team,将 john 和 jane 添加为团队成员,并调用 printTeamMembers 方法打印团队成员的姓名。
在 Team 类中的 printTeamMembers 方法中,只通过调用 Person 对象的 getName 方法来获取人的姓名, 而不直接访问 Person 对象的私有属性。这样,Team 类只依赖于 Person 类提供的公共接口,降低了类之间的耦合性,符合迪米特法则。
/**
* 迪米特法则Demo
* 又叫最小知道原则
*/
class Person {
private readonly name: string
constructor(name: string) {
this.name = name
}
getName(): string {
return this.name
}
}
class Team {
private readonly members: Person[]
constructor() {
this.members = []
}
addMember(member: Person): void {
this.members.push(member)
}
printTeamMembers(): void {
for (const member of this.members) {
console.log(member.getName())
}
}
}
// 使用示例
const john = new Person('John')
const jane = new Person('Jane')
const team = new Team()
team.addMember(john)
team.addMember(jane)
team.printTeamMembers()迪米特法则的核心思想是要求模块之间尽量减少彼此的直接依赖,通过封装和合理设计接口,使得模块之间只依赖于最少的其他模块。 这样可以提高系统的可维护性、可扩展性和灵活性,减少模块之间的耦合性。
迪米特法则的目标是降低对象之间的耦合性,通过尽量减少依赖关系,使得系统的各个模块更加独立、可维护和可扩展。
迪米特法则鼓励开发人员设计出低耦合、高内聚的模块,让每个模块只关注自己的核心功能,尽量减少对其他模块的了解和依赖。这样的设计能够增强系统的灵活性、可维护性和可扩展性。
更新日志
2025/5/18 18:01
查看所有更新日志
24657-于c0f2d-于6b33b-于e6a79-于
