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

LinuxMint 22.1(Ubuntu24.04)下通过Wine完美运行同花顺远航版的实战指南 本文详细介绍了在LinuxMint 22.1(Ubuntu24.04)系统下通过Wine完美运行同花顺远航版的实战指南。从基础环境准备到深度优化,包括Wine环境配置、同花顺远航版安装、字体显示调优、任务栏兼容性修复等关键步骤,帮助Linux用户高效使用同花顺远航版进行股票交易和行情分析。 阅读详情

一、定义

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

二、理解

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

通俗地讲,一个类应该对自己需要调用的类知道得最少,至于它的内部是如何复杂工作的自己不需要知道,只需知道它提供的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、尽量限制局部变量的有效范围,降低类的访问权限;

五、优缺分析

  • 优点: 弱化类与类之间的耦合关系(高内聚、低耦合),弱化耦合关系可以提升复用率;
  • 缺点: 因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,会造成不同模块之间的通信效率降低,同时也大大增加了系统的复杂度,使系统的不同模块之间不容易协调;解决这个问题的方式是:使用依赖倒转原则,这样就可以使调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友。
PLL锁相环性能上不去?可能是电荷泵的电流失配在捣鬼(附Jae-Shin Lee经典方案解析) 本文深入分析了PLL锁相环性能瓶颈的根源——电荷泵电流失配问题,详细解析了Current Mismatch和Current Deviation的区别及其对系统的影响。重点介绍了Jae-Shin Lee的多级电流镜技术,该方案通过运放构建虚拟短路和四级电流镜结构,显著降低了电流失配,使参考杂散改善15dB以上。文章还提供了从仿真到流片的完整优化流程,帮助工程师系统解决电荷泵性能问题。 阅读详情

相关推荐

java设计模式4,迪米特法则

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

学Java,找哪吒 4322

java开发最少知识原则

如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个应用。迪米特法则强调:在类的结构设计上,每一个类都应该尽量降低成员变量的访问权限。也就是说一个类应该包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开;迪米特法则的根本思想是:强调类之间的松耦合;类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改了,不会对有关系的类造成波及;问题由来。

mcband的博客 317

基于量子机器学习改进的K-means聚类算法及其应用实现_量子K-means算法_QK-means_量子计算_文本嵌入_MTEB基准测试_自建数据集_V-measure评估_聚类可.zip

基于量子机器学习改进的K-means聚类算法及其应用实现_量子K-means算法_QK-means_量子计算_文本嵌入_MTEB基准测试_自建数据集_V-measure评估_聚类可.zip

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

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

小毛驴的博客 688

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

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

好久不见的流星 1818

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

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

qq_46093575的博客 703

Java编程 最小知识原则

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

Spring为核心 1300

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

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

MaoLin Tian's Blog 750

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

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

u010832572的专栏 1098

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

其中,我们称出现成员变量,方法参数,方法返回值中的类为直接朋友,而出现在局部变量中的类不是直接朋友。为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题。System.out.println(“------------学校总部员工------------”);System.out.println(“------------学院员工------------”);中,根据上文中直接朋友的定义,这两个类并不是直接朋友,违反了迪米特法则

2401_85112269的博客 422

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

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

Hurricane_m的博客 771

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

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

Horace's Blog 413

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

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

qq_44891295的博客 455

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

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

weixin_33904756的博客 100

最少知识”原则

前言:在学习适配器模式与外观模式时,我们会接触到这个原则。 1. 什么是最少知识原则最少知识(least knowledge)原则:只和你的密友谈话。 什么意思呢?就是告诉我们要减少对象之间的交互,只留下几个“密友”。 所以,当你设计一个系统时,不管是任何对象,你都要注意它所交互的类有哪些,并注意它和这些类是如何交互的。 这个原则希望我们能够在设计中,减少类耦

Jalen备忘录 1906

设计模式六大原则例子(五)-- 最少知识原则(LKP)/ 迪米特法则(LOD)例子

之前我们对设计模式的六大原则做了简单归纳,这篇博客是对最少知识原则进行的举例说明。 最少知识原则的意义朋友类的定义:出现在成员变量、方法的输入输出参数中的类。而方法体类内部的类不能算。 每个对象都必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,这种关系的类型有很多,如组合、聚合、依赖等。 具体实现:在实际应用中经常会出现这样一个方法:放在本类中也可以,放在其他类中也没有问题,怎么去衡量

yabay2208的博客 4729

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

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

Fatter$hday的博客 601

最少知识原则

7最少知识选择,在外观模式中体现的最好。 对象的方法调用范围: a该对象本身 b作为参数传递进来的对象 c此方法创建和实例化的对象 d对象组件 public class Car { Engine engine; public Car() { // 初始化发动机 } public void start(Key key) {

zhuhai__yizhi的专栏 634

设计原则最少知识原则 javascript

一个软件实体应当尽可能少地与其他实体发生相互作用,这就是最少知识原则(LKP),所谓软件实体是一个广义的概念,包括系统,类,,对象,模板,函数,变量等。而在javascript中,软件实体大多指的是对象的概念,一般来说,减少对象之间的联系首先要做好对对象的封装,使其暴露出有限的接口和内容,其次是javascript中对象繁多,包括自带的window,location等,再加上各种自定义对象,按照单一职责原则来说程序中很容易出现复杂的对象关系网,而此时就需要最少知识原则来减少对象之间的耦合了。

allenliu6的博客 1610

Android设计模式六大原则之迪米特原则

迪米特原则又被称为 最少知识原则,意思就是说呢,一个对象应该对其他对象有最少的了解。我们知道,一个类如果太依赖另一个类,那么他们之间耦合度就会很大,当一个类发生改变时,对另一个类产生的影响也会很大的。 迪米特法则还有一个更简单的定义:只与直接的朋友通信 迪米特原则遵循编程原则 :高内聚,低耦合。 只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。 好了,定义和规则我们也都知道了,那接下来我们就场景配合代码示例来讲讲怎么运用迪米特原则。 在学校里,有校长,班级(班主任),学生等几种角色,校长想要了解某个

Misdirection_XG的博客 210
上一篇: JAVA设计模式—代理模式
下一篇: Git指令说明—ubuntu
ASHL1985
博客等级 码龄10年 0粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值