迪米特法则

迪米特法则

泪湿孤枕 提交于 2020-03-23 17:23:13
1定义 迪米特法则又叫做最少知识原则,也就是说,一个对象应当对其他对象尽可能少的了解。不和陌生人说话。英文简写为: LoD。 2来源历史 1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一Booch等普及。后来,因为在经典著作《 The Pragmatic Programmer》而广为人知。 3作用 一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。 迪米特法则的意义在于降低类之间的耦合。由于每个对象尽量减少对其他对象的了解,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。 迪米特法则不希望类之间建立直接的联系。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。 4原理与实现 迪米特法则强调了一下两点: 一、从被依赖者的角度来说:只暴露应该暴露的方法或者属性,即在编写相关的类的时候确定方法/属性的权限。 //计算机类 public class Computer{ private void saveCurrentTask(){ //do

《设计模式》——迪米特法则

拥有回忆 提交于 2020-03-11 10:07:25
定义   其实《设计模式之禅》关于原则的部分,我最喜欢的就是《迪米特法则》没什么特殊原因,前段时间部门培训,让我出个培训内容,就是选择的迪米特法则。其实原因很简单,就因为看它名字都不知道究竟是拿来干啥的。 先臭美一下 《设计模式》——目录 ,然后让我们进入正题。   所以究竟什么是迪米特法则呢?   迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP),虽然名字不同,但描述的是同一个规则:一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的这么多public方法,我就调用这么多,其他的我一概不关心。   对于这个定义说实话我还是挺喜欢的,但也是生活中我很难做到的一点,那就是“我就调用这么多,其他的我一概不关心”。其实在小的公司,这样的性格是不好的,毕竟很难做到一个萝卜一个坑,大家或多或少都需要承担一些职能外的任务。而且从个人成长的角度来说,其实也是参与越多,收获也会越多。    有感一段废话,可以跳过不看。职场中有一种情况,那就是A只做十件事,而且十件事都完成的很好;而B需要做一百件事,但是有一件事没有做好。这两个人谁的年终评估会更高一些呢?当然,这里不是劝大家“各人自扫门前雪

设计模式的六大原则

喜欢而已 提交于 2020-03-07 13:06:35
一、单一职责原则(Single Responsibility Principle) 二.开闭原则(Open-Closed Principle, OCP) 三、里氏代换原则(Liskov Substitution Principle, LSP) 四、依赖倒置原则(Dependence Inversion Principle,DIP) 五、接口隔离原则(Interface Segregation Principle, ISP) 六、迪米特法则(Law of Demeter, LoD) 总结 一、单一职责原则(Single Responsibility Principle) 定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有 可能会导致原本运行正常的职责P2功能发生故障。 单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中

设计模式8-迪米特法则

一个人想着一个人 提交于 2020-02-07 16:05:28
7 迪米特法则(最少知识原则) 7.1 描述 减少类之间的交互,减少类之间的耦合,类之间的通过第三个类去交互。 7.2 优点 1)降低类之间的耦合 2)提高了类的复用率和拓展性。 3)和依赖倒转的不同时,同级类之间不通信。依赖倒转是上层调用细节的父类来减少依赖。 7.3 缺点 产生大量中间类,增加系统的复杂性,降低通信效率。 7.4 设计原则 依赖者只依赖应该依赖的对象 被依赖者只暴露应该暴露的方法。 1) 在类的划分上,降低类之间的耦合。 2) 降低类成员的访问权限。 3) 不暴露类的属性成员。 7.5 示例 #include "stdafx.h" #include <iostream> class Star { public: std::string GetName() { return name; } void SetName(std::string name1) { name = name1; } private: std::string name; }; class Fans { public: std::string GetName() { return name; } void SetName(std::string name1) { name = name1; } private: std::string name; }; class Agent { public:

设计原则(6) -- 迪米特法则

隐身守侯 提交于 2020-01-29 08:44:05
迪米特法则的定义 迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。 迪米特法则的定义是:只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。 迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。 迪米特法则的优点 迪米特法则要求限制软件实体之间通信的宽度和深度,正确使用迪米特法则将有以下两个优点。 降低了类之间的耦合度,提高了模块的相对独立性。 由于亲合度降低,从而提高了类的可复用率和系统的扩展性。 但是

java设计模式--迪米特法则

橙三吉。 提交于 2020-01-10 20:49:33
基本介绍 1、一个对象应该对其他对象保持最少的了解 2、类与类关系越密切,耦合度越大 3、迪米特法则又叫 最少知道原则 ,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供public方法,不对外泄露任何信息 4、迪米特法则还有个更简单的定义:只与直接朋友通信 5、 直接的朋友 :每个对象都会与其他对象有耦合关系,只要两个对象只有有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。 案例分析 public class Demeter1 { public static void main(String[] args) { SchoolManager schoolManager = new SchoolManager(); schoolManager.printAllEmployee(new CollegeManage()); } } //总部员工的类 class Employee { private String id; public String getId() { return id; } public void

设计模式(七)迪米特法则(LoD)

▼魔方 西西 提交于 2019-12-20 10:33:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 迪米特法则(LoD):一个对象应当对其他对象有尽可能少的了解。 广义迪米特法则在类的设计上的体现 1.优先考虑将一个类设置成不变类 一个对象与外界通信大体分成两种,一种是改变这个对象的状态的,另一种是不改变这个对象的状态的。如果一个对象的内部状态根本就是不可能改变的,那么它与外界的通信就大打折扣。当涉及任何一个类时,都首先考虑这个类的状态是否需要改变。即使一个类必须是可变类,在给它的属性设置赋值方法时,除非真的需要,否则不要为一个属性设置赋值方法。 2.尽量降低一个类的访问权限 对于顶级的类来说,只有两个可能的访问等级: protected:这是默认的访问权限。如果一个类是protected的,那么它就只能从当前库访问。 public :如果一个类时public的,那么这个类从当前库和其他库可以访问。 一个类设置成protected的好处是,一旦这个类发生修改,那么受影响的客户端必定都在这个库内部。由于一个软件包有他自己的库结构,因此一个访问权限为protected是不会被应用程序使用的。 3.谨慎的使用Serializable 一个类如果实现了Serializable接口的话,应用程序可以将这个类的实例串行话,然和再并行化。由于串行化和并行化涉及到类的内部结构

设计原则-迪米特法则

守給你的承諾、 提交于 2019-12-19 11:37:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 迪米特法则: 一个软件实体应当尽可能少地与其它实体发生相互作用. 如果一个系统符合迪米特法则, 那么当其中某一个模块发生修改时, 就会尽量少地影响其他模块, 扩展会相对容易, 这是对软件实体之间通信的限制, 迪米特法则要求限制软件实体之间通信的宽度和深度. 迪米特法则可降低系统的耦合度, 使类与类之间保持松散的耦合关系. 迪米特法则还有几种定义形式, 包括: 不要和"陌生人"说话, 只与你的直接朋友通信 等, 在迪米特法则中, 对于一个对象他的朋友包括以下几类: 当前对象本身. 以参数形式传入当前对象/方法中的对象. 当前对象的成员对象. 如果当前对象的成员对象是一个集合, 那么集合中的元素也都是朋友. 当前对象所创建的对象. 任何一个对象, 在满足上面的条件之一, 就是当前对象的朋友, 否则就是陌生人. 在应用迪米特法则时, 一个对象只能与直接朋友发生交互, 不要和陌生人发生直接交互, 这丫很难过做可以降低系统的耦合度, 一个对象的改变不会给太多其他度夏宁带来影响. 迪米特法则要求我们在设计系统时候, **应该尽量减少系统之间的交互, 如果两个对象之间不必彼此直接通信, 那么这两个对象就不应该发生任何的直接的相互作用, 如果其中一个对象需要调用另一个对象的某一个方法, 可以通过第三者转发这个调用. **简言之

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

旧街凉风 提交于 2019-12-04 00:40:51
迪米特法则的定义   迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。   迪米特法则的定义是:只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。   迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。 迪米特法则的优点   迪米特法则要求限制软件实体之间通信的宽度和深度,正确使用迪米特法则将有以下两个优点。 降低了类之间的耦合度,提高了模块的相对独立性。 由于亲合度降低

设计模式之迪米特法则

喜你入骨 提交于 2019-12-03 13:37:31
迪米特法则(LoD):如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 迪米特法则的根本思想在于强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。 来源: https://www.cnblogs.com/hssds/p/11797450.html