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

技术面向对象设计原则之迪米特法则 面向对象设计原则之迪米特法则转载来自: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)

相关推荐

  • 解除流量封顶,40G流量用完啦,怎么办

    技术解除流量封顶,40G流量用完啦,怎么办联通腾讯王卡解除流量封顶,根据网络使用公平原则,在当月总流量达到40G后将会关闭上网功能,次月自动恢复。如当月要继续使用,可通过电子渠道开通“解除流量封顶服务”,开通后超出40G

    生活 2021年10月23日
  • git版本控制gitosis的安装与使用是怎样的

    技术git版本控制gitosis的安装与使用是怎样的git版本控制gitosis的安装与使用是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

    攻略 2021年11月10日
  • 云呐统一运维一体机|工单管理系统智能化运维解决方案

    技术云呐统一运维一体机|工单管理系统智能化运维解决方案 云呐统一运维一体机|工单管理系统智能化运维解决方案运维管理软件集成了事件标准流程机制管理(主管分发、系统分发、工程师自建、用户报修)、事件SLA分

    礼包 2021年12月22日
  • google的数据分析用的什么(google analytics分析证书含金量)

    技术替代Google Analytics的轻量级分析工具是什么本篇文章给大家分享的是有关替代Google Analytics的轻量级分析工具是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收

    攻略 2021年12月16日
  • vscodepython翻译插件(vscode中好用的中文翻译插件)

    技术如何开发一个vscode百度翻译插件本篇文章给大家分享的是有关如何开发一个vscode百度翻译插件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。每次给元

    攻略 2021年12月13日
  • 抖音刷赞推广平台,抖音粉丝增加方法?

    技术抖音刷赞推广平台,抖音粉丝增加方法?自从短视频火爆以来就产生了一个新的产业,那就是刷数据了,刷粉原理呢就是在一些兼职平台下单,让平台注册的用户帮你去刷这些数据,当然了这是比较高端的方式,其实市面上还是有很多打着真人粉

    测评 2021年10月20日