设计原则之迪米特法则
来源:互联网 发布:阿里云国际版没信用卡 编辑:程序博客网 时间:2024/06/02 22:00
定义
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。——百度百科
解释:
迪米特法则又叫最少知识原则,就是说一个对象应该尽可能少的了解其他对象——不要和陌生人说话。
那么问题来了?那应该和谁说话?答案是和自己的直接朋友说话。在面向对象的开发中该法则的表现是:
一个实体(如类)应该尽可能少的与其他实体相互作用,如果要相互作用也应该是和与自己直接相联系的
实体相互作用。那么当想要与其他第三方发生相互作用时,应该依靠与自己直接联系的实体(friend)转接
这种相互作用。可以认为就是当类A需要调用另一个非直接相联系的类(类C)的方法时,可以通
过friend类(类B)调用类C的方法,然后类A再调用其friend类(类B)中的相应的方法。
作用:
在合成/聚合复用原则中,使用合成/聚合来尽量避免使用继承实现复用,那么这也带来了一个问题,就是类与类
之间的依赖关系增加了。而迪米特法则就是用来减少类与类之间依赖的,这样就降低了类之间的耦合度,使得
模块之间相对独立,有利于代码复用,同时当对一个类修改时也不会过多的影响其他类。
代码示例:
《设计模式其实很简单》这本书中给了一个例子,如下:
//某人类public class Somebody{ //参数Friend类的方法 public void operation1(Friend friend) { Stranger stranger=friend.provide(); stranger.operation3(); }}//朋友类Friendpublic class Friend{ //私有数据成员,某个陌生人 private Stranger stranger=new Stranger(); public void operation2() { } public Stranger provide() { return stranger; }}
上面的代码违反了迪米特法则,因为如果要给Somebody定义一个它的直接关联类(即一个Friend的话),那么这个类应该是Friend类,因为Somebody的一个方法需要Friend类作为参数,那么这样以来,Stranger类就不是Somebody的直接关联类,但是上面的Somebody的operation1方法却直接调用了Stranger类的operation3方法,所以这违反了迪米特法则。
所以应该在Friend类中加一个方法,它执行了对Stranger类的operation3方法的调用。然后在Somebody的operation1方法中有friend调用加入的那个方法,从而实现和上面代码相同的功能。
代码如下:
//朋友类public class Friend{ private Stranger stranger=new Stranger(); pubic void operation2() { } public void provide() { return stranger; } pubic void forward() { stranger.operation3(); }}//某人类public class Somebody{ public void operation1(Friend friend) { friend.forward(); }}
- 设计原则之迪米特法则
- 设计原则之--迪米特法则
- 设计原则之迪米特法则
- 设计原则之迪米特法则
- 设计原则之迪米特法则
- OOD设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则 .
- 面向对象设计原则之迪米特法则
- 设计模式原则之四:迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 面向对象设计原则之迪米特法则
- 设计模式六大原则之迪米特法则
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
- Java IO
- Android Search 有历史记录 逐字检查 清空历史
- jdk 十进制 minior.major
- Java调用XML的方法:DocumentBuilderFactory
- 设计原则之迪米特法则
- 【PyQt4 实例27】事件过滤器
- 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程策划篇
- Coming Back
- Project Eluer - 16
- kaptcha验证码使用
- Java 定时任务系列(2)- Spring定时任务的几种实现
- 第六章 图
- Insertion Sort List