目录
迪米特法则,被称为:最少知识原则(Law of Demeter),也被称为“只和直接朋友交流”原则,是一种软件设计原则,旨在减少系统各组件之间的耦合。该原则强调一个对象应该尽量少地了解其他对象的细节,尤其是那些不直接与自己交互的对象。
一、主要思想
1.只与对象的“直接朋友”(直接关联的对象)进行交互。
2. 尽量避免通过链式调用访问对象的内部信息(例如,a.getB().getC().doSomething()),因为这会导致紧耦合。
二、优点
1. 降低耦合度:通过减少对象之间的依赖关系,提升系统的灵活性和可维护性。
2. 提高模块化:有助于将功能模块化,便于进行单元测试和重构。
3. 增强代码的可读性:清晰的责任边界使得代码更易于理解
三、 应用示例
假设有如下类:
class Engine {
public void start() {
System.out.println("Engine started");
}
}
class Car {
private Engine engine;
public Car() {
this.engine = new Engine();
}
public Engine getEngine() {
return engine;
}
}
class Driver {
private Car car;
public Driver(Car car) {
this.car = car;
}
public void startCar() {
// 违反最小知识原则,直接调用链
car.getEngine().start();
}
}
在这个例子中,Driver直接访问了Car内部的Engine对象。这意味着Driver依赖于Car和Engine 的实现细节。为了遵循最小知识原则,我们可以通过引入简单的接口或者方法来改进设计:
class Engine {
public void start() {
System.out.println("Engine started");
}
}
class Car {
private Engine engine;
public Car() {
this.engine = new Engine();
}
// Car 提供的一个高层方法,隐藏 Engine 的实现细节
public void start() {
engine.start();
}
}
class Driver {
private Car car;
public Driver(Car car) {
this.car = car;
}
public void startCar() {
// 现在 Driver 只需要知道 Car 提供的方法
car.start();
}
}