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

    1、背景

   在图书馆借书,刚开始的时候,直接跑到相应的楼层去,到里面去转,去找要借的书,在里面溜达半天才能找到;后来知道图书馆有一个电脑查询处,然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的信息,还有所在的相关楼层存放的相关位置。

  2、定义

迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也可能发生变化。

  核心思想:最少依赖

  具体体现:

  • 类内部应该高内聚,设置相应的权限,有选择的暴露方法,这就是封装的奥秘。
  • 类的依赖关系尽量减少,保持简单和独立,降低耦合。

  有些东西,可以适当的知道,知道的太多对你不好。关系越复杂,人越不敢接近你。要达到很高的内修养,才能有很好的表现。

  3、设计模式中的具体应用

1)、门面(外观)模式

如果一个子系统内部的对象构成自己的朋友圈,而子系统外部 对象都属于陌生人的话,那么子系统外部的对象与内部的对象就不应当直接通信,而应当通过一个双方都认可的朋友,也就是门面对象进行通信,这就导致了门面模式。

   2)、中介者模式

   这里一些对象形成一个中等规模的朋友圈,而圈内很多的对象都有排列组合般的交互作用。这时,可以通过创造一个大家共有的朋友对象,然后大家都通过这个朋友对象发生相互作用,而将相互之间的直接相互作用省略掉,这就导致了中介者模式。

   3、规则建议

在类的划分上,应当创建弱耦合的类,类与类之间的耦合越弱,就越有利于实现可复用的目标。

   在类的结构设计上,每个类都应该降低成员的访问权限。

   在类的设计上,只要有可能,一个类应当设计成不变的类。

   在对其他类的应用上,一个对象对其他类的对象的应用应该降到最低。尽量限制局部变量的有效范围。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android点滴积累

Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

  指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多。Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别...

33380
来自专栏逸鹏说道

记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)

项目上线以来一直存在一个比较揪心的问题,和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务...

28550
来自专栏做全栈攻城狮

程序员带你十天快速入门Python,玩转电脑软件开发(二)

声明:本次教程主要适用于已经习得一门编程语言的程序员。想要学习第二门语言。有梦想,立志做全栈攻城狮的你

8610
来自专栏程序员的碎碎念

redis不难,benny带你入门

关于redis的学习,相信在各大博客、公众号上和教学视频教程里有很多,benny学习了一段时间总算是入门了,在会不定期的更新redis学习日记。

13540
来自专栏java思维导图

架构师必须掌握的 10 条设计原则

函数是程序员的工具中最重要的抽象形式。它们能更多地被重复使用,你需要编写的代码就越少,代码也因此变得更可靠。较小的函数遵循单一职责原则更有可能被重复使用。

8230
来自专栏GreenLeaves

EF基础知识小记一

1、EF等ORM解决方案出现的原因 因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,...

18290
来自专栏无题

读《Effecttive Java》

“读完一本《Effecttive Java》,才算是一个中级Java程序员” 2019-09-15 “读完一本《Effecttive Java》,才算是一个中...

48550
来自专栏更流畅、简洁的软件开发方式

面向对象最重要的是“抽象”,三层最重要的也是“抽象”,没有抽象就不是真正的面向对象、三层。

  只用class的,那叫做“基于对象”,比如当初的vb6.0;只是分了三个项目,把以前写在一起的代码分成了三份,所谓的业务逻辑层就是一个传声筒,这一类自称三层...

29660
来自专栏Java技术栈

Maven精选系列--classifier元素妙用

先来看这么一个依赖 <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>js...

359100
来自专栏云飞学编程

Python爬虫的简单实现!用python爬虫自己做天气预报查询

最近小编在学习爬虫,就想找个东西练练手,小说、图片、音乐什么的都烂大街了,正好最近天气是越来越冷,小编窝家里自己敲了个天气简单查询的代码,请大家指正下!

13210

扫码关注云+社区

领取腾讯云代金券