JAVA设计模式—最少知识原则

java设计模式4,迪米特法则 迪米特法则(Law of Demeter)又叫作最少知道原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。............... 阅读详情

一、定义

最少知识原则——即迪米特法则:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。

二、理解

面向对象的程序设计中,对象与对象之间尽量相互独立,具体对象的行为由具体的对象去完成,而不是由某个对象去指定另一个对象去实施具体的行为。

通俗地讲,一个类应该对自己需要调用的类知道得最少,至于它的内部是如何复杂工作的自己不需要知道,只需知道它提供的public方法,其他的不需要去关心。

三、案例

栗子:要吃晚餐了,主人通知管家去准备晚餐,管家则安排哪位佣人去准备晚餐。
这里,主人只需要通知管家即可,而不需要自己去安排或者指挥管家去安排哪位佣人来准备晚餐。

佣人:

public class Maid {
 
	private String maidName;
	
	public Maid() {
		super();
	}
 
	public Maid(String maidName) {
		super();
		this.maidName = maidName;
	}
 
	public void cook(){
		System.out.println(this.maidName + ">>做饭!");
	}
	
}

管家:

public class Butler {
 
	public void cook(List<Maid> maidList){
		for (Maid maid : maidList) {
			maid.cook();
		}
	}
}

主人:

public class Master {
 
	public void cookCommand(Butler butler){
		List<Maid> maidList = new ArrayList<Maid>();
		for(int i = 0; i < 2; i++){
			maidList.add(new Maid("maid" + i));
		}
		
		butler.cook(maidList);
	}
}

上面的这个设计就违背了迪米特法则,因为,Master与Butler、Maid是层级的关系,在Master这个类中,只需要去管理Butler,而Butler去管理Maid,通俗来说是Master给Butler吩咐任务,Butler接到任务后然后再给Maid分配任务。

我们按照这个思路重新设计一下上面的例子。

管家:

public class Butler {
 
	public List<Maid> getMaidList(){
		List<Maid> maidList = new ArrayList<Maid>();
		for(int i = 0; i < 2; i++){
			maidList.add(new Maid("maid" + i));
		}
		return maidList;
	}
	
	public void cook(){
		List<Maid> maidList = getMaidList();
		for (Maid maid : maidList) {
			maid.cook();
		}
	}
}

主人:

public class Master {
 
	public void cookCommand(Butler butler){
		butler.cook();
	}
}

这样设计的话,你会发现,Master不用跟Maid打交道,而是和Butler打交道,这样的话,减少了类与类之间不必要的耦合,使得系统更稳定,扩展更容易。

四、注意事项

  • 1、在类的划分上,应当创建弱耦合的类,类与类之间的耦合越弱,就越有利于实现可复用的目标;
  • 2、在类的结构设计上,每个类都应该降低成员的访问权限;
  • 3、在类的设计上,只要有可能,一个类应当设计成不变的类;
  • 4、在对其他类的引用上,一个对象对其他类的对象的引用应该降到最低;
  • 5、尽量限制局部变量的有效范围,降低类的访问权限;

五、优缺分析

  • 优点: 弱化类与类之间的耦合关系(高内聚、低耦合),弱化耦合关系可以提升复用率;
  • 缺点: 因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,会造成不同模块之间的通信效率降低,同时也大大增加了系统的复杂度,使系统的不同模块之间不容易协调;解决这个问题的方式是:使用依赖倒转原则,这样就可以使调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友。
java开发最少知识原则 如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个应用。迪米特法则强调:在类的结构设计上,每一个类都应该尽量降低成员变量的访问权限。也就是说一个类应该包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开;迪米特法则的根本思想是:强调类之间的松耦合;类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改了,不会对有关系的类造成波及;问题由来。 阅读详情

相关推荐

第一章.设计原则-----最少知识原则

最少知识原则也叫迪米特法则(Law of Demeter,LoD),“迪米特”这个名字源自 1987 年美国东北大学一个名为“Demeter”的研究项目。 许多人更倾向于使用迪米特法则这个名字,也许是因为显得更酷一点。但本书参考 Head First Design Patterns 的建议,称之为最少知识原则。一是因为这个名字更能体现其含义,另一个原因 是“法则”给人的感觉是必须强制遵守,而原则只...

小毛驴的博客 688

Java学习 --- 设计模式的七大原则迪米特法则(最小知道原则)

1、一个对象应该对其他对象保持最少的了解。2、类与类关系越密切,耦合度越大。3、迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好,通俗来说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了公共的方法,不对外泄露任何信息。4、迪米特法则定义只与直接朋友通信。4、直接朋友每个对象都会与其他对象有耦合关系,只要两个对象之间的耦合关系,这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。称出现。......

qq_46093575的博客 704

Java 设计模式】设计原则迪米特法则

迪米特法则是由荷兰计算机科学家伊恩·荷尔姆·迪米特(Ian Holland Demeter)于1987年提出的。它规定一个对象应该对其他对象有最少的了解,即一个类不应该知道太多关于其他类的内部细节。迪米特法则有一个简洁的表述:“只与你的直接朋友通信,不跟陌生人说话”,其中“直接朋友”指的是当前对象的成员、方法参数、方法返回值中的对象。迪米特法则是一项有助于降低类之间耦合性的基本原则。通过遵循这一原则,我们可以创建更加灵活、可维护和可扩展的面向对象系统。

好久不见的流星 1818

Java编程 最小知识原则

最小知识原则:例如能使用private不使用public,对于实体之外的其他对象可见性最小 变量作用域最小化原则: 例如能使用局部变量不使用全局变量,JAVA垃圾回收器能够在最快时间内回收该变量 避免相同对象的重复创建:例如for循环需创建新对象,对象的创建置于循环外 堆变量、栈变量: 变量的创建尽量置于方法体内, 尽量减少方法调用次数(例如for循环,尽量避免

Spring为核心 1300

Java设计模式 经典设计原则】七 LOD迪米特法则

SRP原则侧重高内聚,指导类功能的设计要单一,LOD法则侧重低耦合,指导类间依赖关系要松耦合,ISP原则是从调用者的角度出发确保接口的设计具备对调用者有良好的隔离性。基于接口而非实现编程思想也是从调用者的角度出发确保稳定的依赖和可插拔的实现。总的来说SRP原则、ISP原则、LOD法则以及基于接口而非实现编程思想的目标都是实现代码的高内聚低耦合,提高代码的可扩展性、可读性和可维护性。

MaoLin Tian's Blog 751

Java设计模式——迪米特法则

迪米特法则又叫作最少知识原则,就是说,一个对象应当对其他对象要有尽可能少的了解。 一、狭义的迪米特法则 如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法时,可以通过第三者转发这个调用。 1.朋友圈与陌生人 如下图所示,“某人”与一个“朋友”组成自己的朋友圈,两个人都需要与一个圈外的“陌生人”发生相互作用。 “朋友

u010832572的专栏 1098

Java设计模式迪米特法则的详细介绍

其中,我们称出现成员变量,方法参数,方法返回值中的类为直接朋友,而出现在局部变量中的类不是直接朋友。System.out.println(“------------学校总部员工------------”);System.out.println(“------------学院员工------------”);System.out.println(“------------学院员工------------”);中,根据上文中直接朋友的定义,这两个类并不是直接朋友,违反了迪米特法则。//管理学院员工的管理类。

2401_89192069的博客 855

Java设计模式 七大原则(六)迪米特法则(Law Of Demeter)

"笛米特法则":这是说"你的类对其它类知道的越少越好"; 1.概念: 一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特法则不希望类之间建立直接的联系。如...

Hurricane_m的博客 771

Java设计模式之设计原则-迪米特法则 (LoD)

????文章示例代码???? 迪米特法则也叫做最少知道原则。 附链 你也可以在这些平台阅读本文: 语雀 个人博客 定义 一个对象应该对其他对象保持最少的了解。 在《Head First 设计模式》一书中,针对该原则也强调:只和你的密友交流。 在程序中,出现在成员变量、方法的输入、输出参数中的类我们可以称之为成员朋友类,而出现在方法体内部的类不属于朋友类。 这些个成员朋友类的对象和当前对象之间存在关联、...

Horace's Blog 414

java设计模式迪米特法则(LoD)

迪米特法则(Law of Demeter LoD) –>最少只是原则(Least Knowledge Principle,LKP) 一个对象应该对其它的对象有最少的了解 转载于:https://www.cnblogs.com/cody1988/archive/2012/06/05/2536754.html...

weixin_33904756的博客 100

JAVA设计模式七大原则—— 迪米特法则

1:基本介绍 一个对象应该对其他对象保持最少的了解 类与类关系越密切,耦合度越大 迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的 越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内 部。对外除了提供的public 方法,不对外泄露任何信息 迪米特法则还有个更简单的定义:只与直接的朋友通信 直接的朋友:每个对象都会与其他对象有耦...

qq_44891295的博客 455

java设计模式迪米特法则(俗称:最少知识原则)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34291004的博客 189

java设计模式迪米特法则使用举例

迪米特法则的核心是通过封装和间接交互减少类间的直接依赖。典型应用包括中介者模式、外观模式及职责清晰的接口设计。实际开发中需权衡耦合度与代码复杂度,避免机械套用原则

DKPT的博客 1020

java设计模式迪米特法则介绍与说明

迪米特法则通过限制对象间的交互范围,有效降低了系统耦合度,是构建高内聚、低耦合软件架构的重要工具。实际开发中需结合具体场景灵活应用,避免机械套用导致的过度设计。其核心在于“隐藏细节,只露必要”,从而实现代码的健壮性与可维护性。

DKPT的博客 400

Java设计模式-七大架构设计原则-最少知道原则迪米特法则

Java设计模式-七大架构设计原则-最少知道原则迪米特法则

Fatter$hday的博客 603

java设计模式迪米特法则使用场景分析

大型复杂系统:模块间交互频繁时,通过迪米特法则降低耦合,提升可维护性。频繁变更的模块:封装细节后,内部修改不影响外部调用。第三方库集成:隐藏底层实现,仅暴露稳定接口。

DKPT的博客 542
上一篇: JAVA设计模式—代理模式
下一篇: Git指令说明—ubuntu
ASHL1985
博客等级 码龄10年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值