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

技术面向对象设计原则之迪米特法则 面向对象设计原则之迪米特法则转载来自:https://blog.csdn.net/lovelion/article/details/7563445
迪米特法则来自于19

迪米特里面向对象设计原理定律。

转载自:https://blog.csdn.net/lovelion/article/details/7563445

德米特里定律来自1987年东北大学的一个名为德米特里的研究项目。迪米特里定律,也称为最小知识原理,LKP),定义如下:

德米特里定律:一个软件实体应该尽可能少地与其他实体交互。

如果一个系统符合迪米特里定律,当其中一个模块被修改时,对其他模块的影响会尽可能小,扩展也会相对容易,这就是软件实体之间通信的局限性。Dimitri定律要求限制软件实体之间通信的宽度和深度。迪米特里定律可以降低系统的耦合度,保持类与类之间的松散耦合关系。

迪米特里定律有几种定义,包括:不要和陌生人说话,只和你的直接朋友交流等。在迪米特里定律中,对于一个对象,它的朋友包括以下几类:

(1)当前对象本身(本);

(2)以参数形式传递到当前对象方法中的对象;

(3)当前对象的成员对象;

(4)如果当前对象的成员对象是集合,那么集合中的元素都是朋友;

(5)当前对象创建的对象。

任何对象,如果满足上述条件之一,就是当前对象的“朋友”,否则就是“陌生人”。应用迪米特里规则时,一个对象只能和直接的朋友交互,不能和“陌生人”交互,这样可以降低系统的耦合度,一个对象的变化不会影响太多其他对象。

迪米特里定律要求我们在设计系统时尽量减少物体之间的相互作用。如果两个对象不需要直接通信,那么这两个对象就不应该有任何直接的交互。如果其中一个对象需要调用另一个对象的方法,该调用可以由第三方转发。简而言之,就是通过引入合理的第三方来降低现有对象之间的耦合度。

在将Dimitri规则应用于系统设计时,要注意以下几点:在类划分中,要尽量创建松散耦合的类,类之间的耦合度越低,越有利于重用。松耦合类一旦被修改,不会对关联类造成太大影响;在类的结构设计中,每个类都应该尽量减少其成员变量和成员函数的访问权限。在类设计中,只要有可能,类型应该被设计成一个不变的类。在对其他类的引用中,一个对象对其他对象的引用应该最小化。

下面是一个简单的例子,可以加深我们对迪米特里定律的理解:

Sunny Software Company开发的CRM系统包含多个业务操作窗口,其中一些界面控件之间存在复杂的交互关系,一个控件事件的触发会引起多个其他界面控件的响应。例如,当单击一个按钮时,相应的列表框、组合框、文本框和文本标签都将改变。

图1初步设计方案结构图。

在图1中,由于界面控件之间复杂的交互关系,在该窗口中添加新控件时,需要修改与界面控件交互的其他控件的源代码,系统扩展性差,不方便添加和删除新控件。

现在用迪米特里重建它。

在这个例子中,通过引入专门用于控制界面控件交互的中介器,可以降低界面控件之间的耦合度。引入中间类后,接口控件之间没有直接引用,而是先将请求转发给中间类,然后中间类完成对其他控件的调用。当需要添加或删除新控件时,只需修改中间类,无需修改新添加控件或现有控件的源代码。重构的结构如图2所示。

图2改造后的结构图。

【作者:刘伟http://blog.csdn.net/lovelion】

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/70032.html

(0)

相关推荐

  • 浮生半日闲,“偷得浮生半日闲”是什么意思

    技术浮生半日闲,“偷得浮生半日闲”是什么意思偷得浮生半日闲这句话的意思是,在这烦乱的世间中暂时得到片刻清闲浮生半日闲。出处:唐代诗人李涉的《题鹤林寺僧舍》原文:终日昏昏醉梦间,忽闻春尽强登山。因过竹院逢僧话,偷得浮生半日

    生活 2021年10月30日
  • 什么是微软total熔毁漏洞分析和预警?

    技术微软TotalMeltdown漏洞分析预警是怎样的这期内容当中小编将会给大家带来有关微软TotalMeltdown漏洞分析预警是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    攻略 2021年12月20日
  • 如何理解php中echo

    技术如何理解php中echo这篇文章主要介绍“如何理解php中echo”,在日常操作中,相信很多人在如何理解php中echo问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解php中e

    攻略 2021年10月22日
  • windows平台bugfree3.0.3搭建心得是什么

    技术windows平台bugfree3.0.3搭建心得是什么windows平台bugfree3.0.3搭建心得是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易

    攻略 2021年10月25日
  • javascript变量命名是否区分大小写

    技术javascript变量命名是否区分大小写这篇文章主要介绍了javascript变量命名是否区分大小写,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    攻略 2021年11月18日
  • SQL如何实现增删改查

    技术SQL如何实现增删改查这篇文章给大家分享的是有关SQL如何实现增删改查的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SQL 是用于访问和处理数据库的标准的计算机语言。注意哟,SQL是一门语

    攻略 2021年12月1日