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

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

相关推荐

  • 电脑安装安卓系统,安卓系统如何安装在电脑上

    技术电脑安装安卓系统,安卓系统如何安装在电脑上手机使用电脑下载安装软件的方法电脑安装安卓系统:
    1.使用电脑浏览器下载APK格式的安装包,连接数据线传输至手机,然后操作手机:在应用程序-我的文件中找到安装包,运行后点击安

    生活 2021年10月20日
  • 传输层协议与路由器

    技术传输层协议与路由器 传输层协议与路由器1、 TCP协议:
    面向连接的,可靠的进程到进程通信的协议
    TCP提供全双工服务
    2、UDP协议:
    无连接的不可靠的协议
    效率高
    3、TCP报文段U R G :

    礼包 2021年12月2日
  • 马克笔画风景,请问一般初一要用马克笔吗

    技术马克笔画风景,请问一般初一要用马克笔吗自来水笔也叫钢笔马克笔画风景。不过自来水笔,还有一种是水粉自来水笔,适用于创作绘画的,不知道你说的是哪一种,我个人比较喜欢水粉自来水笔,因为他好控制。马克笔上色会容易脏,而且复涂

    生活 2021年10月23日
  • Redis的java客户端Jedis的代码怎么写

    技术Redis的java客户端Jedis的代码怎么写这篇文章将为大家详细讲解有关Redis的java客户端Jedis的代码怎么写,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了

    攻略 2021年10月20日
  • 单数第三人称,英语第三人称单数的规则

    技术单数第三人称,英语第三人称单数的规则一、人称代词he,she,it是第三人称单数.如单数第三人称:He likes watching TV.他喜欢看电视.She has lunch at twelve.她十二点吃午餐

    生活 2021年10月21日
  • Oracle11g报警功能识别是否会忽略或吞掉错误的程序

    技术Oracle11g报警功能识别是否会忽略或吞掉错误的程序Oracle11g报警功能识别是否会忽略或吞掉错误的程序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易

    攻略 2021年11月29日