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

迪米特法则(Law of Demeter,LoD)
同称 最少知识原则(Low knowledge Principle,LKP)

好,按照习惯,从老外的话开始介绍

Each unit should have only limited knowledge about other units: only
units “closely” related to the current unit.

概念1:每一个单元与其他单元间的关系应保持在有限的知识上,即仅与当前单元紧密关联的单元。

Each unit should only talk to its (immediate) friends; don’t talk to strangers.

概念2:每一个单元都应该只与它的(直接)朋友交流,不和陌生人交流。

其实概念2有点扯淡,说直接朋友不就得了,因为朋友的朋友也算是你的朋友,不过在你没和他接触前他对于你来说就是一个陌生人。然后按照这个逻辑,那概念1不就是我们成熟程序员常说的,朋友天下不如知心一个嘛,反正陌生人对我们也没啥卵用,如同饮水,冷暖自知。ok,概念大概就是这个意思,教我们交朋友。

如果说其他原则侧重的是每个类的简单化,那么,迪米特法则阐述的就是类与类间关系的简单化,加上其他原则的相辅相成,那就是说,将类的编写控制的更简单和抽象。

CPU在做运算时,数据的获取方式一般遵从缓存(L1,L2,L3)–>主存–>磁盘的顺序,下面我们用代码模拟一下流程。

先来个错误示范:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

乍一看没啥大问题,功能已经实现了。但是从迪米特法则的概念出发,这样子写是不合理的。代码的基本逻辑是没错的,但是相对于CPU来说,与它最熟悉的是Cache,而Block和Memory与它而言都是陌生人。Cache和Memory是彼此的直接朋友,Block和Memory也是彼此的直接朋友,那么我们可以按照迪米特法则的概念把代码改一下。

修改后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样子修改就符合迪米特法则了,因为每个类面向的都是它的直接朋友,没有与陌生人产生关系。

迪米特法则其根本思想,是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成搏击,也就是说,信息的隐藏促进了软件的复用。但是迪米特法则也会带来大量的中介类,导致系统类的数量急剧膨胀。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值