设计模式之美 - 22
迪米特法则,利用这个原则可以帮我们实现代码的“高内聚,低耦合”。
什么是“高内聚、松耦合”?如何利用迪米特法则来实现“高内聚、松耦合”?有哪些代码设计是明显违背迪米特法则的?对此又该如何重构?“高内聚、松耦合”是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、基于接口而非实现编程等。在这个设计思想中,“高内聚”用来指导类本身的设计,“松耦合”用来指导类与类之间依赖关系的设计。
迪米特法则的英文翻译是:Law of Demeter,缩写是 LOD。英文翻译为:The Least Knowledge Principle。
法则的含义:不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。
对于 “不该有直接依赖关系的类之间,不要有依赖”。我举个例子解释一下。 public class NetworkTransporter { // 省略属性和其他方法... public Byte[] send(HtmlRequest htmlRequest) { //... } } public class HtmlDownloader { private NetworkTransporter transporter;//通过构造函数或IOC注入 public Html downloadHtml(String url) { Byte[] rawHtml = transporter.send(new HtmlRequest(url)); return new Html(rawHtml); } } public class Document { private Html html; private String url; public Document(String url) { this.url = url; HtmlDownloader downloader = new HtmlDownloader(); this.html = downloader.downloadHtml(url); } //... }