各位博友晚上好
先回顾一下之前学习的设计模式和原则
简单工厂模式,策略模式,单一职责原则,开放封闭原则,依赖倒转原则,装饰模式,代理模式,抽象工厂模式,原型模式(Copy,深复制,浅复制)以及昨天刚刚学习的模板方法(最大化优化代码)。
今天吃完饭听了一会猫扑网络电台,感觉里面的MM声音不错,听了一个小时,现在开始继续学习啦。
迪米特法则定义(Law of Demeter)
又叫最少知识法则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其它对象尽可能少的了解,不和陌生人说话。英文简写:LoD。
它在软件中的定义是这样的:如果两个类之间不必彼此直接进行通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要用另一个类的方法的话,可以通过第三者来转发这个调用。
用我们现在的国情来举个例子,当今社会是个靠关系吃饭的社会,没有关系寸步难行啊,这也就是我们社会现在主要的弊病,官场,行业内部都是尔虞我诈。为什么会这样呢,人们为了生存,都在找自己的关系网络,不管是高层底层通吃,这样的弊端是什么,关系复杂啊。还记得“蜗居”里面的一句台词:关系越用越活。这样 的后果就是人际关系复杂,尤其是负责公关的,这一点体现的尤为明显,当我我是一个最看不惯爱攀关系的人,所以呀我就学习了迪米特法则。如果想让这个社会没有那么复杂,那快用迪米特法则吧。用迪米特法则来制定自己做人的原则,做事的原则,为人处事的原则。
迪米特首先强调的是在类的设计上,每一个类都应该尽量降低类的访问权限,也就是说一个类包装好自己的private状态,不需要让别的类知道的字段和方法就不要公开。迪米特原则的根本思想是强调了类之间的松耦合。
类之间的耦合度越弱,越有利于被复用,一个处在弱耦合的类被修改,不会对关系的类造成波及。也就是说信息的隐藏促进了软件的复用。
LoD的来源:
1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一Booch等普及。后来,因为在经典著作《 The Pragmatic Programmer》而广为人知。
模式和意义:
迪米特法则可以简单说成:talk only to your immediate friends。
对于面向OOD来说,又被解释为下面几种方式:一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。
迪米特法则不希望类直接建立直接的接触。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。
有兴趣可以研究一下设计模式的门面模式(Facade)和中介模式(Mediator),都是迪米特法则应用的例子。
值得一提的是,虽然Ian Holland对计算机科学的贡献也仅限于这一条法则,其他方面的建树不多,但是,这一法则却不仅仅局限于计算机领域,在其他领域也同样适用。比如,美国人就在航天系统的设计中采用这一法则。
狭义的迪米特法则的缺点:
在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。
遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。
门面模式和调停者模式实际上就是迪米特法则的应用。
广义的迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类。
尽量降低一个类的访问权限。
谨慎使用Serializable。
尽量降低成员的访问权限。
迪米特原则比较简单,但是它贯穿了整个软件设计理念,需要我们去亲身在编程中灵活的去运用他。
时间不早,早点休息,明天还有新一天的工作。欢迎你的阅读。www.tianboo.net
分享到:
相关推荐
设计模式6大原则:迪米特法则
迪米特法则LoD.zip
c#设计模式之迪米特原则
android设计模式迪米特法则_慈禧太后为何不和陌生人说话.pdf
简单代码解释迪米特法则,代码可能比较简单,而且也没有什么编程规范,重在解释而已。
开发中常见一种模式之一,在简化其开发步骤,完成同样的工作开发中常见一种模式之一,在简化其开发步骤,完成同样的工作隐藏>>
NULL 博文链接:https://364232252.iteye.com/blog/2371236
主要为大家详细介绍了C++设计模式迪米特法则实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
设计模式中的迪米特法则,比较详细介绍了迪米特法则,有C#示例。
主要介绍了迪米特法则,迪米特法则就是一个在类创建方法和属性时需要遵守的法则,有兴趣的可以了解一下
计算机后端-Java-图解java设计模式019 迪米特.avi
计算机后端-Java-图解java设计模式020 迪米特.avi
主要介绍了Java的设计模式编程中迪米特法则的应用示例,迪米特法则中主张创建和使用弱耦合的类,需要的朋友可以参考下
计算机后端-Java-图解java设计模式021 迪米特法.avi
迪米特法则1
迪米特法则 是面向对象设计中很重要的一种设计规则
对常用的设计模式进行了详细的解析。对于面试非常用。
详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。