设计模式原则(6)迪米特法则

(Law of Demeter,LoD系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度

定义:又叫最少知识原则(Least Knowledge Principle或简写为LKP)几种形式定义:

(1) 不要和“陌生人”说话。英文定义为:Don't talk to strangers.

Ÿ(2) 只与你的直接朋友通信。英文定义为:Talk only to your immediatefriends.

(3) 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

简单地说,也就是,一个对象应当对其它对象有尽可能少的了解。一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的public方法,我就调用这么多,其他的一概不关心。

法则分析:

1)朋友类:
在迪米特法则中,对于一个对象,其朋友包括以下几类:
Ÿ(1) 当前对象本身(this);
Ÿ(2) 以参数形式传入到当前对象方法中的对象;
Ÿ(3) 当前对象的成员对象;
Ÿ(4) 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;
Ÿ(5) 当前对象所创建的对象。
任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。
2)狭义法则和广义法则:
在狭义的迪米特法则中,如果两个类之间不必彼此直接通信那么这两个类就不应当发生直接的相互作用,如果其中的一个类需要调用另一个类的某一个方法的话,可以通过 第三者转发这个调用。 


狭义的迪米特法则:可以 降低类之间的耦合,但是会在系统中增加大量的小方法并散落在系统的各个角落,它可以使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联,但是也会 造成系统的不同模块之间的通信效率降低,使得系统的不同模块之间不容易协调。
广义的迪米特法则指对对象之间的信息流量、流向以及信息的影响的控制,主要是 对信息隐藏的控制。信息的隐藏可以使各个子系统之间脱耦,从而允许它们独立地被开发、优化、使用和修改,同时可以促进软件的复用,由于每一个模块都不依赖于其他模块而存在,因此每一个模块都可以独立地在其他的地方使用。一个系统的规模越大,信息的隐藏就越重要,而信息隐藏的重要性也就越明显。
3)迪米特法则的主要用途:在于控制信息的过载。
•在类的划分上,应当尽量 创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;
•在类的结构设计上,每一个类都应当 尽量降低其成员变量和成员函数的访问权限
•在类的设计上,只要有可能, 一个类型应当设计成不变类
•在对其他类的引用上, 一个对象对其他对象的引用应当降到最低
例子:外观模式

迪米特法则与设计模式Facade模式、Mediator模式使民无知

系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度,因为在你的系统中,扩展的时候,你可能需要修改这些类,而类与类之间的关系,决定了修改的复杂度,相互作用越多,则修改难度就越大,反之,如果相互作用的越小,则修改起来的难度就越小..例如A类依赖B类,则B类依赖C类,当你在修改A类的时候,你要考虑B类是否会受到影响,而B类的影响是否又会影响到C类. 如果此时C类再依赖D类的话,呵呵,我想这样的修改有的受了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值