最少知识原则
Least Knowledge Principle 简称LKP
什么是最少知识原则
一个软件实体应当尽可能少地与其他实体发生相互作用。
减少对象(方法、系统、类、模块等)之间的联系。
最少知识原则的优点
降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。
如何做到最少知识原则
- 只与直接的朋友通信
每个对象都必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,这种关系的类型有很多,如组合、聚合、依赖等。
朋友类的定义:出现在成员变量、方法的输入输出参数中的类。 而方法体类内部的类不能算。
- 不能过于亲密
只与直接的朋友通信,但是不能过于亲密,否则耦合关系变得异常牢固,而且,修改时涉及的面也就越大,变更引起的风险就越大。 - 是自己的就是自己的
如果我们发现在一个类中的一个方法,放在本类可以,放在其他的类中也可以并且对任何的类都不产生影响,那么就遵循一个原则,把方法放在本类中
代码举例
第一段代码中小组对于老师来说不是朋友类不应该产生关系。
class Teacher {
constructor() {
this.group = new Group();
}
command(leader) {
leader.count(this.group);
}
}
class Leader {
constructor() {}
count(group) {
//...
}
}
class Group {
constructor() {}
addPerson() {}
}
class Teacher {
constructor() {}
command(leader) {
leader.count();
}
}
class Leader {
constructor() {
this.group = new Group();
}
count(group) {
//...
}
}
class Group {
constructor() {}
addPerson() {}
}