`

第11章 迪米特法则(LoD 笔记)

阅读更多
迪米特法则(Law of Demeter)又叫做最少知识原则(Least Knowledge Principle),就是说,一个对象应当对其他对象有尽可能少的了解。
狭义的迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
不满足迪米特法则的系统
这里要讨论的系统由三个类组成,分别是Someone,Friend和Stranger。其中Someone与Friend是朋友,而Friend与Stranger是朋友。系统的结构图如下图所示。





从上面的类图可以看出,Friend持有一个Stranger对象的引用,这就解释了为什么Friend与Stranger是朋友。为了解释为什么Someone与Friend是朋友,参见Someone的源码:
public class Someone {
	public void operation1(Friend friend) {
		Stranger stranger = friend.provideStranger();
		stranger.operation3();
	}
}


Friend的provideStranger()方法会提供自己所创建的Stranger的实例,代码如下:
public class Friend {
	private Stranger stranger = new Stranger();
	public void operation2() {
		
	}
	public Stranger provideStranger() {
		return stranger;
	}
}


Someone的方法operation1()不满足迪米特法则。因为这个方法引用了Stranger对象,而Stranger对象不是Someone的朋友。
使用迪米特法则进行改造
可以使用迪米特法则对上面的例子进行改造,改造的做法就是调用转发。改造后的情况如图:




从上面的类图可以看出,与改造前相比,在Someone与Stranger之间的联系已经没有了。Someone不需要知道Stranger的存在就可以做同样的事情。Someone的源码如下:
public class Someone {
	public void operation1(Friend friend) {
		friend.forward();
	}
}

forward()方法是做什么的呢?
public class Friend {
	private Stranger stranger = new Stranger();
	public void operation2() {
		
	}
	public void forward {
		stranger.operation3();
	}
}


狭义的迪米特法则的缺点
遵循狭义的迪米特法则会产生一个明显的缺点:会在系统里造出大量的小方法,散落在系统的各个角落。这些方法仅仅是传递间接的调用,因此与系统的商务逻辑无关。当设计师试图从一张类图看出总体的架构时,这些小的方法会造成迷惑和困扰。
遵循类之间的迪米特法则会使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。
与依赖倒转原则互补使用





Someone现在与一个抽象角色建立了朋友关系,这样做的好处是“朋友”可以随时将具体的Stranger换掉。
门面模式与调用者模式实际上就是迪米特法则的应用。



  • 大小: 9.1 KB
  • 大小: 10.5 KB
  • 大小: 12.9 KB
分享到:
评论

相关推荐

    迪米特法则LoD.zip

    迪米特法则(Law of Demeter,简称LoD)是面向对象设计中的一种重要原则,源自1987年在 Northeastern University 提出。这个法则旨在降低类与类之间的耦合,提高系统的可维护性和可扩展性。在中文环境中,迪米特法则...

    第三十讲:基础五迪米特法则

    在编程和软件设计中,迪米特法则(Law of Demeter,简称LoD)是一个重要的设计原则,它属于面向对象设计中的一个最佳实践。迪米特法则得名于希腊神话中的先知迪米特,其核心思想是“只与你的直接朋友交谈”。这一...

    简单代码解释迪米特法则

    迪米特法则(Law of Demeter)是面向对象设计中的一种设计原则,它提倡降低类与类之间的耦合,使得系统更加稳定和易于维护。这个原则由美国东北大学的一个研究团队提出,其核心思想可以概括为“只和你的朋友交谈,不...

    设计模式6大原则:迪米特法则

    设计模式6大原则:迪米特法则

    22丨理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”? 1

    迪米特法则,又称最小知识原则,主张一个对象应该尽量减少对其他对象的了解,只与其直接相关的对象交互,避免通过第三方对象进行通信,以此降低耦合度。 迪米特法则的英文名Law of Demeter,强调了每个对象应该限制...

    迪米特法则_动力节点Java学院整理

    迪米特法则是Java编程中一个重要的法则,它指导我们在类创建方法和属性时需要遵守的原则。下面我们将详细介绍迪米特法则的定义、问题由来、解决方案、优点和实践场景。 定义:迪米特法则是指一个对象应该对其他对象...

    迪米特法则---门面Facade模式.docx

    门面(Facade)模式是一种设计模式,遵循迪米特法则,旨在简化子系统的使用,减少客户端与子系统之间的复杂依赖关系。迪米特法则主张一个对象应该尽量减少与其他对象的交互,只与直接的朋友交流,以此提高系统的内聚...

    迪米特法则

    迪米特法则,又称最少知识原则,是面向对象设计中的一种重要原则,旨在减少类与类之间的耦合,提高软件系统的可维护性和可扩展性。根据迪米特法则,一个对象应该尽量减少对其他对象的了解,即一个类应当只与它的直接...

    C++设计模式迪米特法则实例

    迪米特法则是一种重要的设计模式,它也被称为最少知识原则(Least Knowledge Principle,LKP)。该原则的主要思想是,一个对象应当对其他对象有尽可能少的了解,或者说,不和陌生人说话。这意味着,一个对象应该尽量...

    迪米特法测

    迪米特法则(Law of Demeter,LoD)是软件设计模式中的一种,它源于对象导向编程领域,旨在降低类与类之间的耦合性,提高系统的可维护性和可扩展性。这一法则通常被称为“最少知识原则”,即一个对象应当对其他对象...

    读书笔记:java 23种设计模式 开闭原则 依赖倒转原则 迪米特法则 设计模式思想 Java入门demo.zip

    读书笔记:java 23种设计模式 开闭原则 依赖倒转原则 迪米特法则 设计模式思想 Java入门demo

    迪米特法则1

    迪米特法则,又称最少知识原则,是面向对象设计中的一种重要原则,旨在减少软件实体之间的耦合,增强模块的独立性。这个原则源于1987年美国东北大学的迪米特研究项目,由伊恩·荷兰提出,并由UML创始人之一的...

    Java与模式(清晰书签版) 设计模式 part3

    第1章 模式的简史和形而上学 第2章 统一建模语言UML简介 第3章 软件的可维护性和可复用性 ...第11章 迪米特法则 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 .......

    Java的设计模式编程中迪米特法则的应用示例

    迪米特法则,也被称为最少知识原则(Law of Demeter),是面向对象设计中的一个重要原则。这个原则主张每个对象应该尽可能少地了解其外部对象,从而降低类之间的耦合度,增强系统的可维护性和可扩展性。在Java设计...

    Java与模式.清晰.rar

    第11章 迪米特法则 第三部分 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 专题:单例模式与MX记录 第17章 专题:多例(Multiton)模式与多语言支持 第18章 专题:序列键...

    c#设计模式之迪米特原则

    迪米特原则(Law of Demeter,简称LoD)是面向对象设计中的一种设计原则,源自于1987年 Northeastern University 的一个研究项目。这个原则规定了类与类之间的交互应该保持最低限度的了解,也就是说,一个对象应当只...

    戏说面向对象程序设计

    第一章面试受挫——代码无错就是好? 第二章代码规范、重构 ...第十一章无熟人难办事?——聊设计模式迪米特法则 第十二章有了门面,程序员的程序会更加体面 第十三章设计模式不能戏说!设计模式怎就不能戏说?

Global site tag (gtag.js) - Google Analytics