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

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

相关推荐

  • 分库分表与NewSQL怎么选择

    技术分库分表与NewSQL怎么选择本篇内容主要讲解“分库分表与NewSQL怎么选择”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分库分表与NewSQL怎么选择”吧!NewSQ

    攻略 2021年11月12日
  • fedora安装软件命令(fedora u盘安装)

    技术fedora 16下如何安装使用mysql小编给大家分享一下fedora 16下如何安装使用mysql,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了

    攻略 2021年12月18日
  • 二字词,有“开始”意思的二字词语

    技术二字词,有“开始”意思的二字词语红尘 轮回 牵绊 红颜 流年 沧海 年华 相知 奈何 旖旎二字词、遒健、翩跹、轻谧、深邃、真淳、耄耋、倥偬、矍铄 斑驳、悸动、秋昆、浮华、汗颜、拨冗、莅临、韶华、茕茕、孑然 荏苒、昭然

    生活 2021年10月20日
  • python中的list是什么意思(python中list用法)

    技术Python中的List怎么用这篇文章主要为大家展示了“Python中的List怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中的List怎么用”这篇文

    攻略 2021年12月19日
  • Flex for eclipse插件如何安装

    技术Flex for eclipse插件如何安装这篇文章主要介绍Flex for eclipse插件如何安装,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flex for eclipse插件的安装

    攻略 2021年11月26日
  • mybatis-plus判断数据是否存在(springboot mybatisplus使用教程)

    技术spring boot+mybatis-plus怎样使用shardingsphere分库分表spring boot+mybatis-plus怎样使用shardingsphere分库分表,相信很多没有经验的人对此束手无

    攻略 2021年12月20日