📅  最后修改于: 2023-12-03 15:32:00.196000             🧑  作者: Mango
得墨忒耳定律,也叫最少知识原则(Least Knowledge Principle,LKP),是一种软件设计原则,该原则要求设计者只与他们的密友交谈,而避免和陌生人交流。换而言之,这个原则要求在一个软件设计之中,一个模块或对象应该对其他模块或对象有尽可能少的了解,只了解必要的信息。这样,当一个模块或对象改变时,不会对其他模块或对象造成太大的影响。
最少知识原则通常适用于以下情况:
比如说,如果你需要在一个类中访问到另一个类的某一个属性,就应该考虑将这个属性封装成一个方法,而不是直接让这个类去访问那个属性。这样的话,如果那个属性发生变化,就只要修改对应的方法就可以了,而不需要修改访问这个属性的类。
最少知识原则实现的方法有很多,下面介绍几种常见的实现方法。
在Java中,封装可以通过访问修饰符来实现。当使用private访问修饰符时,就可以确保只有在同一个类中才能访问到这个属性。而当使用public访问修饰符时,就可以让其他类访问到这个属性。因此,为了遵循最少知识原则,我们应该将属性封装起来,只向外部提供必要的访问方法。
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
依赖注入是一种常用的设计模式,可以帮助我们降低类与类之间的耦合度。例如,当需要一个Logger对象时,我们可以使用注入的方式将Logger对象传递给需要它的类,而不是在每个需要它的类中去创建Logger对象。
public class MyClass {
private Logger logger;
public MyClass(Logger logger) {
this.logger = logger;
}
public void doSomething() {
logger.log("I'm doing something...");
}
}
如果方法的参数过多,那么就会让这个方法变得复杂、难以维护。为了避免这种情况,在方法设计时,应该将参数减少到最少。如果需要传递多个参数,可以将它们封装成一个对象或者数组。
public class Calculator {
public int add(int x, int y) {
return x + y;
}
}
可以改写成:
public class Calculator {
public int add(Numbers numbers) {
return numbers.getX() + numbers.getY();
}
}
public class Numbers {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
最少知识原则是一种有效的软件设计原则,它可以帮助我们降低类与类之间的耦合度,提高代码的可维护性和可扩展性。封装、依赖注入以及将方法参数减少到最少是实现最少知识原则的有效方法。