迪米特法则(Law ofDemeter,LoD)又叫最小知识原则(least knowledge principle,lkp),定义为:一个对象对其它对象尽可能少的理解。
通俗的说法有很多,比如,只与你直接的朋友们通信;不要跟“陌生人”说话;
这样做的目的就是降低类之间的耦合。想想上课的时候,老师经常说高内聚,低耦合。为了更好的理解,我们说一些题外话。拿笔记本电脑举例子,记得小时候,我拆笔记本电脑,内部的部件之间不像现在笔记本一样。部件之间的连线会比较多一点,不像现在的笔记本,说拆很快就能拆下来。这是为什么呢?因为现在的笔记本比我小时候的笔记本,在内部构件上,更具备独立性,一个部件高度内聚部件自己的功能职责,对外提供一个简单的接口。。我想如果不这样做,那么当我们要拆一个笔记本的时候,会很麻烦,内部数据线缠绕,你可以想象一下那样的场景,即使是一个熟练的技术工人,也未必能够很快的拆完笔记本。但是高度内聚之后,我们很方便就能够拆下来。并且,这样做的好处不仅仅是这样,当笔记本坏掉之后,我们也能够更快的测试时那一部分坏掉,然后将该部分拆下,装上新的部件能够马上使用。这些是高内聚,低耦合的好处。
硬件如此,软件也是一样的,具有雷同之处,有很多原因让我们保证产品内部高内聚,低耦合。
而遵从迪米特法则能够让我们的设计降低类之间的耦合。为了更好的理解,我们从一个例子讲起。
大部分的人都应该看过“教父“三部曲,(没看过的也没有关系),教父名字上和教会有关系,的确,电影中的教父信仰基督教,但是他并不是基督教的什么职务。教父其实就是黑社会老大给自己取得一个不错的代名词而已,因为这个黑社会老大比一般的黑社会老大高上几个档次。现在教父想要杀人了,(因为某人挨着他的路了)。看下面一段没有满足迪米特法则的设计与代码。
代码:
class Person{ public String name; } class GodFather{ CoreMember coremember; public void kill(Person someone) { Killer killer = new Killer(); killer.kill(someone); } } class CoreMember{ private Killer killer; } class Killer{ public void kill(Person someone) { System.out.println(someone.name+"被杀死了"); } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索笔记本
, 耦合
, 内聚
, 低耦合
, 一个
, 之间
, 部件
, 迪米特法则
迪米特
,以便于您获取更多的相关知识。