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

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

相关推荐

  • 口加偏旁组成新字,“口”字加偏旁,变新字。

    技术口加偏旁组成新字,“口”字加偏旁,变新字。“口”字加偏旁能组成 口加偏旁组成新字:e799bee5baa6e997aee7ad94e58685e5aeb931333365646262中、叶 、古 、右 、占 、号 、

    生活 2021年10月27日
  • Linux 安装软件的三种方法

    技术Linux 安装软件的三种方法 Linux 安装软件的三种方法一、Linux 安装软件的三种方法
    rpm安装、yum 安装、源代码编译安装区别1、rpm 安装类似于window的安装包,下载后直接安

    礼包 2021年12月17日
  • prometheus SQL汇总

    技术prometheus SQL汇总 prometheus SQL汇总由于自己写一些prometheus sql告警规则会比较耗时,所以这里从腾讯云的云原生监控和prometheus operator中

    礼包 2021年11月22日
  • Python文本预处理的方法是什么

    技术Python文本预处理的方法是什么本篇内容介绍了“Python文本预处理的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,

    攻略 2021年10月25日
  • vue中的生命周期和钩子函数是什么

    技术vue中的生命周期和钩子函数是什么这篇文章主要讲解了“vue中的生命周期和钩子函数是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中的生命周期和钩子函数是什

    攻略 2021年12月4日
  • mysql中如何处理Plugin 'InnoDB' registration as a STORAGE ENGINE failed错误

    技术mysql中如何处理Plugin InnoDB registration as a STORAGE ENGINE failed错误这篇文章主要为大家展示了“mysql中如何处理Plugin InnoDB regist

    攻略 2021年11月6日