1. 秦子帅的博客首页
  2. Android

六大设计原则详解(5)-迪米特法则

简介:

迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.

迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

六大设计原则详解(5)-迪米特法则

下面通过几个方面来解析迪米特法则,示例借鉴了<设计模式之禅>


一.Only talk to your immediate friends

Only talk to your immediate friends(只与直接的朋友通信),每个对象都必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,这种关系的类型有很多,如组合、聚合、依赖等。下面通过例子来了解这句话的含义。


有这么一个场景,体育老师想让体育委员来确认一下女生是否来齐,下面建立一个Teacher类,并写个commond方法来发送命令给体育委员,代码如下:

体育委员的GroupLeader的实现类如下:

从场景中我们得知体育委员和老师都和女生类产生依赖,所以定义一个女生类(空类)如下:

下面是场景的实现:

运行的结果是女生的数量是:20人

分析之前先要确定一下什么是朋友类朋友类的定义:出现在成员变量、方法的输入输出参数中的类。 而方法体类内部的类不能算。

在Teacher类中最直观的朋友类是GroupLeader,那Girl类是不是朋友类呢?根据迪米特法则中对朋友类的定义,方法体类内部不是朋友类,我们知道Girl类不是朋友类,因为他包含在commond方法内。Teacher类与陌生的类发生了交流,违背了迪米特法则。


正确的Teacher类,GroupLeader类,Client类如下:

六大设计原则详解(5)-迪米特法则


二.不能过于亲密


迪米特法则规定只与直接的朋友通信,但是不能过于亲密,否则耦合关系变得异常牢固,而且,修改时涉及的面也就越大,变更引起的风险就越大。因此,要适时反复衡量:是否可以减少public方法和属性,改为private、package-private、protected等访问权限,及是否可以加上final关键字。

六大设计原则详解(5)-迪米特法则

三.是自己的就是自己的


如果我们发现在一个类中的一个方法,放在本类可以,放在其他的类中也可以并且对任何的类都不产生影响,那么就遵循一个原则,把方法放在本类中。


六大设计原则详解(5)-迪米特法则


总结:

1.只与直接的朋友通信。

2.不能过于亲密。

3.自己的就是自己的。

4.谨慎使用Serializable。


推荐阅读

 


Android学习资源分享合集(1)


Android-炫酷动画跳转


推荐五款管理工具(思维导图)



六大设计原则详解(5)-迪米特法则




原文始发于微信公众号( 秦子帅 ):六大设计原则详解(5)-迪米特法则

发布者:秦子帅,转转请注明出处:http://qinzishuai.cn/index.php/2017/09/23/079d4b75cd/

联系我们

912241847

在线咨询:点击这里给我发消息

邮件:qzs531156@163.com

QR code