Java设计模式——迪米特法则

迪米特法则又叫作最少知识原则,就是说,一个对象应当对其他对象要有尽可能少的了解。

一、狭义的迪米特法则

如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法时,可以通过第三者转发这个调用。

1.朋友圈与陌生人

如下图所示,“某人”与一个“朋友”组成自己的朋友圈,两个人都需要与一个圈外的“陌生人”发生相互作用。


“朋友”与“陌生人”若是朋友,组成“朋友”的朋友圈如下图所示。


相比较之下,“某人”其实并不需要与陌生人直接发生相互作用,但是“朋友”更需要与“陌生人”发生相互作用。这时候,迪米特法则建议“某人”不要直接与“陌生人”发生相互作用,而是通过“朋友”与之直接发生相互作用,如下图所示。


这时候,“朋友”实际上起到了将“某人”对“陌生人”的调用转发给“陌生人”的作用。这种传递叫作调用转发(Call Forwarding)。所谓调用转发,需要隐藏“陌生人”的存在,使得“某人”仅知道“朋友”,而不知道“陌生人”。换言之,“某人”会认为他调用的这个方法是“朋友”的方法。

2、朋友圈的确定

”某人”的朋友圈是如何确定的?以下的条件成为朋友条件:

  • 当前对象本身(this)。
  • 以参量形式传入到当前对象方法中的对象。
  • 当前对象的实例变量直接引用的对象。
  • 当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友。
  • 当前对象所创建的对象。

任何一个对象,如果满足上述条件之一,就是当前对象的“朋友”,否则就是“陌生人”。

3、不满足迪米特法则的系统

系统由三个类组成:分别是Someone,Friend和Stranger。其中Someone与Friend是朋友,而Friend与Stranger是朋友。系统的结构如下图所示。


从上面的类图可以看出,Friend持有一个Stranger对象的引用,所以Friend与Stranger是朋友。Friend类的源代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值