设计模式学习:迪米特法则

迪米特法则(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+"被杀死了");
         }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索笔记本
, 耦合
, 内聚
, 低耦合
, 一个
, 之间
, 部件
, 迪米特法则
迪米特
,以便于您获取更多的相关知识。

时间: 2024-11-10 07:50:23

设计模式学习:迪米特法则的相关文章

设计模式六大原则--迪米特法则

       背景        在学校学习时,可能因为某些事你得去其他二级学院的老师帮忙,大部分老师都是忙的(也许是的)很可能一件小事你要跑很多次.但是如果你这件事直接找的是其他学院的院长,并且院长同意帮忙的话这件事解决起来就容易多了.不知怎地最近老是瞎想感觉这件事又能和设计模式中的迪米特法则(Law of Demeter,LOD),也叫最少知识原则(Least Knowledge Principle,LKP)扯上关系,接下来就由小生带大家粗略的了解一下这个法则吧.        定义    

设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)

原文:设计模式原则(单一.开放封闭.里氏代换.依赖倒转.迪米特法则五大原则) 单一职责原则 单一职责原则,就一个类而言,应该仅有一个引起它变化的原因.   如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,当变化发生时,设计会遭受到意想不到的破坏.事实上,我们完全可以找出来进行分类,分离.   软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离.其实要去判断是否应该分离出类来,也不难,那就是如果你能够想到多余一个的动机去改变

设计模式六大原则——迪米特法则(LoD)

    1.背景      在图书馆借书,刚开始的时候,直接跑到相应的楼层去,到里面去转,去找要借的书,在里面溜达半天才能找到:后来知道图书馆有一个电脑查询处,然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的信息,还有所在的相关楼层存放的相关位置.                2.定义      迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越

Java的设计模式编程中迪米特法则的应用示例_java

定义:一个对象应该对其他对象了解最少 迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用性才可以提高. 形象一点的比喻类似于:监狱内的犯人是不应该跟外面的人接触的,当然或许会有探亲的.这里的监狱就是类,里面的犯人就是类内部的信息,而监狱里的狱警就相当于迪米特法则的执行者 迪米特法则主张: (1)在类的划分上,应该创建有弱耦合的类: (2)在类的结构设计上,每一个类都应当尽量降低成员的访问权限: (3)在类的设计上,只要有可能,一个类应当设计成不变类: (4)在对其他类的引用上,

设计模式六大原则(5):迪米特法则

定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合.          自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚.无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率.低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的.          迪米特法则又叫最少知道原则,最早是在1987年

设计模式学习总结

       之前一直是面向过程编程,前段时间因为某些原因需要更好的去理解一下面向对象思想精髓,在别人的推荐下看了<大话设计模式>这本书.通过对29个模式的学习,不仅仅了解了设计模式是个什么回事,也稍微加深了一点对面向对象(Object-oriented)技术.面向对象技术关注的是对象,对象的优点在于,可以定义自己负责的事物,作要求它自己的事情.对象应该自己负责自己,而且应该清楚地定义责任.它具有三大特征:封装.多态.继承.        封装(Encapsulation),也就是把客观事物封

七大设计原则之迪米特法则

定义 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,它的内部是如何复杂都和自己没关系,只需知道它提供的public方法,其他的一概不关心.  广义的迪米特法则:    一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来.    一个软件实体应当尽可能少的与其他实体发生相互作用

设计模式学习--面向对象的5条设计原则(转)

这几天重新看了一遍<大话设计模式>,发现果然有不同的感悟,而且自己也上网找了<敏捷软件开发-原则.模式与实践>一书来看,那本书的序言中有一段话我觉得很有道理:"美的东西比丑的东西创建起来更廉价,也更快捷."设计一个软件不关要追求代码的优雅问题,更关乎生产成本等.技术大师们在对软件架构的研究中经历了很长时间的摸索,从面向过程到面向对象,从设计原则到设计模式,总结了许多设计上的经典法则,而我们就只是站在巨人的肩膀上眺望远方而已. 从<大话设计模式>中,大

设计模式学习之路-设计模式什么

设计模式是什么?我能想到的是「套路」,或者说是「最佳实践」.要写出「好代码」,我们需要遵循一些「最佳实践」,就好像我们要培养优秀的个人品行,需要遵循一些「美德」. 以下是美国国父富兰克林给自己列的「美德」清单: 1. 节制:食不可饱,衣不过量. 2. 慎言:只讲对人对己有益之言,不说无聊琐碎之话. 3. 条理:让拥有的每件东西都各有其位,让要做的每件事都各有其时. 4. 坚毅:一旦决定做一件事,就马上义无反顾的去做. 5. 节俭:将钱用在于人于己有益的事情上,杜绝浪费. 6. 勤奋:不耽误任何时