迪米特法则(LoD)
目录
一、主要思想
二、优点
三、 应用示例
迪米特法则,被称为:最少知识原则(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(); }
}