当前位置:首页 > java知识学习_java技术文章 > 正文

举例剖析六大设计原则的迪米特法则

浏览384+
设计原则之迪米特法则

一、迪米特法则通俗理解

迪米特法则是设计模式中一个核心软件设计思想的原则,属于六大设计原则之一,被通俗的称为迪米特原则,又叫最小知识原则或最少知道原则。

迪米特法则的本质认为一个对象应该对其他对象有最少的了解,就是一个类对自己依赖的类知道的越少越好,类只需要被需要耦合或调用的类知道即可,类与类之间的关系越密切,耦合度越大,反之则会降低耦合度,两个类之间知道的越少越好正是迪米特原则的核心。

二、迪米特法则诞生的缘由与解决方案

缘由:

类之间的关系越紧密,耦合程度越高,耦合度是软件程序设计中的大忌,既影响程序的复用性,有影响代码之间的隔离性,并且当一个类改变时,对另一类的影响也越大,随着一个类的修改,不得不做出对其它有耦合度的类相应的修改,加剧了工作量。

同事之间高耦合度图示

同事之间高耦合度图示

解决方案:

最优的解决方案就是最小化类之间的耦合,低耦合、高内聚性是软件编程的核心思想,只有通过保持模块之间的耦合度尽可能低,才能提高代码重用率。

具体如何降低耦合度以符合迪米特法则的规定呢?

1)第一,用行内的话说,当类与类之间有依赖时,这个类不管业务有多复杂,在设计时都应该将繁杂的业务逻辑封装在类内部,让外部不可见,只需要提供给外部公共的访问入口。

2)第二,仅与直接的朋友交流。假设每个对象与另一个对象有耦合关系,只要两个对象之间存在耦合关系,我们就说这两个对象是朋友关系,此时应该避免与朋友的朋友之间产生关系。

3)第三,耦合的方式多种多样,例如依赖性,关联性,组成,聚合等等。其中,我们将成员变量,方法参数和方法返回值中的类称为直接朋友,而局部变量中的类不是直接朋友,换句话说,最好避免不熟悉的类作为类内的局部变量。

同事之间高耦合度图示

同事之间低耦合度图示

三、迪米特原则的优点与缺点

优点一:确实实打实的减少了类之间的耦合度,增加了类的封装与内聚性,为日后软件的可扩展和可复用性增加了筹码,并且提高了软件设计中模块的相对独立性,完美的呈现设计模式的思想。

优点二:随着亲和度的降低,类的可重用性和系统的可扩展性得到改善,是对于大型软件开发者的福音。

缺点:迪米特法则也并不是毫无缺点的,过度使用会产生很多不必要的大量中介类,这将增加系统的复杂性并降低模块之间的通信效率, 因此要慎重使用并且平衡软件设计的高内聚性和低耦合性,同时确保系统结构清晰。

四、迪米特法则案例剖析举例

以下案例一的代码展示迪米特法则只应该暴露被公共访问的方法和属性的特性。

以下是一个关于关闭计算机的很经典的案例,当我们手动按下计算机的关闭按钮时,电脑还会附带其他的动作,比如说关闭电脑正在执行的任务,关闭其他运行的程序,然后再关闭显示器,最后才是把电源关闭。

计算机实体类代码

计算机实体类代码

人实体类代码

人实体类代码

通过以上的代码我们可以看出,人这个类在调用电脑类的方法时发现电脑类暴露的方法有很多,不知道该调用哪一个,很明显,电脑这个类中的方法有些杂乱,对于我们人来说,我们只需要调用关闭电脑的操作,关闭电脑的方法就可以了,其他的方法完全没有必要暴露在外。

根据迪米特法则只暴露该暴露的方法的要义作出如下修改:

人关闭电脑符合迪米特法则的代码

人关闭电脑符合迪米特法则的代码

以下案例二是迪米特法则最小依赖原则的案例剖析:

以下这个案例是明星与经纪人的例子,这个案例也是非常的经典,像我们普通的明星工作繁忙,他的日常工作、日程安排都是由那个经纪人带做,明星是不可能自己亲力亲为的,不然的话会很累。

所以,明星这个实体类是不可能亲自去做日程安排的,而是新建了一个经纪人实体中介类,任何事物都交由经济人类代为安排,这样的话便符合最小依赖原则,明星类只依赖经纪人类,见如下代码:

明星与经纪人最小依赖原则代码案例

明星与经纪人最小依赖原则代码案例

 

相关文章推荐

迪米特法则举例
电脑举例子向朋友们理解迪米特法则,核心理解就是解耦,类中自己的功能职责就是高内聚只向外面提供解耦调用的接口,并且调用者与被调用者不要直接接触,避免修改一类连累到其它类也要作出改动。
迪米特法则只与你直接的朋友通信
面向过程编程(pop),面向对象编程(oop),函数式编程(fp)
迪米特法则友元类
学习6大设计原则、23种设计模式
设计原则-迪米特法原则(Demeter Principle)
六边形架构设计
六大设计原则之五:迪米特法则
设计模式原则优点之迪米特法则(最少知道原则)
设计模式原则之迪米特法则
责任声明:文章信息由IT教程屋小编精心整理总结编排而成,倾注了心血和汗水,转载时请遵循行业规范务必注明文章作者、来源及本页链接,谢谢合作!
本篇文章标题:举例剖析六大设计原则的迪米特法则
本篇文章url地址:http://www.itjcw123.cn/2273.html