6大设计原则(5):迪米特法则

迪米特法则:LoD

也被称为最少知识原则

定义:一个对象应该对其他对象有最少的了解。

通俗的说就是一个类应该对自己需要耦合或调用的类知道的最少,类内部如何复杂跟我们没有关系

我们所要了解的只是类对外提供的public方法。

迪米特法则对类的低耦合性提出明确的要求,包含4个含义:

1.只和朋友交流

一个例子:老师让体委点一下女生的数量。

class Teacher {
	public void commond(GroupLeader groupLeader) {
		List<Girls> girls = new ArrayList<>();
		for (int i = 0; i < 20; i++) {
			girls.add(new Girls());
		}
		groupLeader.countGirls(girls);
	}
}

class GroupLeader {

	public void countGirls(List<Girls> girls) {
		System.out.println("女生的数量是:--->" + girls.size());
	}

}

class Girls {
}

public class Client {

	public static void main(String[] args) {
		Teacher teacher = new Teacher();
		teacher.commond(new GroupLeader());
	}
}

每个对象与必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,应该只与朋友类进行交流。

那么什么是朋友类呢?出现在成员变量、方法的输入输出参数的类成为朋友类,出现在方法体内部的类不是朋友类。

上面的代码中,Teacher类的朋友类是GroupLeader类,但是commond方法体中竟然出现了Girls类,显然违反了迪米特法则。

修改一下:

class Teacher {
	public void commond(GroupLeader groupLeader) {

		groupLeader.countGirls();
	}
}

class GroupLeader {

	List<Girls> girls = new ArrayList<>();

	public GroupLeader(List<Girls> girls) {
		this.girls = girls;
	}

	public void countGirls() {
		System.out.println("女生的数量是:--->" + girls.size());
	}

}

class Girls {
}

public class Client {

	public static void main(String[] args) {
		List<Girls> girls = new ArrayList<>();
		for (int i = 0; i < 20;i++){
			girls.add(new Girls());
		}
		Teacher teacher = new Teacher();
		teacher.commond(new GroupLeader(girls));
	}
}

这样就实现了只与朋友类进行交流。

2.朋友间也是有距离的

什么意思呢?

再好的朋友之间也是有秘密可言的。

就是说一个类中的方法不能全部暴露出去,尽可能减少public的属性和方法,public的属性或方法越多,这个类就越不安全,

修改所涉及的面越大。

3.是自己的就是自己的

如果一个方法放在本类中和放在别的类中都行,那么就放在本类中。

4.谨慎使用Serializable

不懂啥意思。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 19:38:32

6大设计原则(5):迪米特法则的相关文章

6大设计原则之迪米特法则

迪米特法则的定义 迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些public方法,我就调用这么多,其他的我一概不关心. 迪米特法则对类的低耦合提出了要求 1.只和朋友交流 什么是朋友呢? 出现在成员变量.方法的输入输出参数中的类称为朋友类,而出现在方法体内部的类不属于朋友类. 注意: 一个类只与朋友交流,不与陌生类交流,类与类之间的关系是建立在类间的,而不是方法间,

六大设计原则之迪米特法则

定义:一个类和另一个类应该保持最小的了解 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类影响也越大. 解决方案:尽量降低类与类之间的耦合. //总公司员工 class Employee{ private String id; public void setId(String id){ this.id = id; } public String getId(){ return id; } } //分公司员工 class SubEmployee{ private Str

七大设计原则之迪米特法则

定义 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,它的内部是如何复杂都和自己没关系,只需知道它提供的public方法,其他的一概不关心. 广义的迪米特法则:    一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来.    一个软件实体应当尽可能少的与其他实体发生相互作用.

面向对象设计原则之迪米特法则

迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目.迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of  Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之

设计模式之6大原则(5)-迪米特法则

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话.英文简写为: LoD. 迪米特法则可以简单说成:talk only to your immediate friends. 对于面向OOD来说,又被解释为下面几种方式:一个软件实体应当尽可能少的与其他实体发生相互作用.每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位. 迪米特

设计模式之6大设计原则

设计模式之6大设计原则 原则一:单一职责原则(Single Responsibility Principle SRP) 定义:There should never be more than one reason for a class to change.(应该有且仅有一个原因引起类的变更) 好处: 1.类的复杂性降低,实现什么职都有清晰明确的定义: 2.可读性高,负责性降低,当然可读性就提高了: 3.可维护性提高,可读性提高,自然就更容易维护了: 4.变更引起的风险降低,变更是必不可少的,如果

面向对象原则之一 迪米特法则

前言 面向对象有人分为五大原则,分别为单一职责原则.开放封闭原则.依赖倒置原则.接口隔离原则.里氏替换原则. 也有人分为六大原则,分别为单一职责原则.开放封闭原则.依赖倒置原则.接口隔离原则.里氏替换原则.迪米特法则. 现在我们来介绍迪米特法则 迪米特法则 1)概念 其法则又叫最少知道法则.从名字上就能知道,类与类之间应该是最少知道的,应当加多一个类来辅助类与类之间的联系. 其概念是一个软件实体应当尽可能少的与其他实体发生相互作用,每一个软件单位对其他的单位都只有最少的知识. 2)说道理 为什么

设计模式——6大设计原则

1.单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. 单一职责的定义是:有且仅有一个原因引起类的变更. 单一职责原则要求一个接口或者一个类只有一个原因引起变化,也就是说一个接口或类只有一个职责,它就负责一件事情. 建议是:接口一定要做到单一职责,类的世界尽量做到只有一个原因引起变化.2.里氏替换原则 里氏替换原则的英文名称是Liskov Substitution Principle,简称是LSP. 里氏替换原则的定义:所有引用基

Java架构师必须知道的 6 大设计原则

序言 在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义.本文主要将总结这些常见的原则,和具体阐述意义. 开发原则 面向对象的基本原则(solid)是五个,但是在经常被提到的除了这五个之外还有 迪米特法则和合成复用原则等, 所以在常见的文章中有表示写六大或七大原则的: 除此之外我还将给出一些其它相关书籍和互联网上出现的原则 1. S单一职责SRP Single-Responsibility Principle, 一个类,最好

阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则

在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义.本文主要将总结这些常见的原则,和具体阐述意义. 开发原则 面向对象的基本原则(solid)是五个,但是在经常被提到的除了这五个之外还有 迪米特法则和合成复用原则等, 所以在常见的文章中有表示写六大或七大原则的: 除此之外我还将给出一些其它相关书籍和互联网上出现的原则: S单一职责SRP Single-Responsibility Principle, 一个类,最好只做一件事