定义:
最少知识原则,也称为“迪米特法则(Law of Demeter)”,是一种软件设计原则,用来减少系统中不同类之间的相互依赖。根据这个原则,一个对象应该尽可能少地了解其他对象(只与直接的朋友通信)。
解决的问题:
- 减少系统中类与类之间的耦合。
- 增强模块间的独立性,使系统更容易维护和扩展。
使用场景:
- 当一个模块或类的实现可能被多个其他类所使用时。
- 设计系统的内部组件时,以降低耦合和提高模块的独立性。
示例代码:
// 不遵守最少知识原则的例子
class Car {
Engine engine;
public void start() {
engine.start();
}
}
class Engine {
CoolingSystem coolingSystem;
public void start() {
// 启动冷却系统
coolingSystem.turnOn();
}
}
// 遵守最少知识原则的重构
class Car {
Engine engine;
public void start() {
engine.start();
}
}
class Engine {
CoolingSystem coolingSystem;
public void start() {
coolingSystem.activate();
}
}
class CoolingSystem {
public void activate() {
// 激活冷却系统
turnOn();
}
private void turnOn() {
// 冷却系统的开启逻辑
}
}
在不遵守最少知识原则的例子中,Engine
类直接调用了CoolingSystem
的方法,增加了耦合。在遵守原则的重构中,Engine
类不直接调用CoolingSystem
的turnOn
方法,而是调用了一个封装了这一行为的方法activate
,这样减少了Engine
对CoolingSystem
内部实现的了解。