[设计模式原则]第五回:迪米特原则

1.引言

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

2.引经据典

核心思想:最少依赖

具体体现:

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

一些理解,有些东西,可以适当的知道,知道的太多对你不好。关系越复杂,人越不敢接近你。要达到很高的内修养,才能有很好的表现。这些江湖术语都包含一些哲理。

 

3.应用反思

 

    //电灯public class Light{public void TurnOn(){if (LifeOver())Console.WriteLine("灯泡亮了");}public void TurnOff(){Console.WriteLine("灯泡黑了");}public bool LifeOver(){Console.WriteLine("寿命还在");return true;}}//电灯开关public class Switch{public void TurnOn(){Light light= new Light();Console.WriteLine("打开开关");light.TurnOn();}public void TurnOff(){Light light = new Light();Console.WriteLine("关上开关");light.TurnOff();}}

上面的两个类 都违反了迪米特原则,Light的LifeOver是一个内部判断的问题,如果外部不需要知道,可以声明为 private。Switch类的两个方法都使用Light,只是一个局部变量,就有两处依赖,可以声明为一个类的成员变量,减少一个依赖。如下:

   //电灯public class Light{public void TurnOn(){if (LifeOver())Console.WriteLine("灯泡亮了");}public void TurnOff(){Console.WriteLine("灯泡黑了");}private bool LifeOver(){Console.WriteLine("寿命还在");return true;}}//电灯开关public class Switch{Light light = new Light();public void TurnOn(){Console.WriteLine("打开开关");light.TurnOn();}public void TurnOff(){Console.WriteLine("关上开关");light.TurnOff();}}

4.规则建议

  • 在类的划分上,应当创建弱耦合的类,类与类之间的耦合越弱,就越有利于实现可复用的目标。
  • 在类的结构设计上,每个类都应该降低成员的访问权限。
  • 在类的设计上,只要有可能,一个类应当设计成不变的类。
  • 在对其他类的应用上,一个对象对其他类的对象的应用应该降到最低。
  • 尽量限制局部变量的有效范围。

 

转载于:https://www.cnblogs.com/qqlin/archive/2012/12/29/2829481.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何判断当前请求的API类型

前言上次,我们判断了《当前请求是否健康检查API》,避免其写入日志。但是,对于我们自己开发的API来说,最好也能来区分,比如调试用API,就不需要再写调用日志了。DisplayName方式直接判断路由地址的方式就不考…

Android之DrawText详解

如果你经常使用Canvas的draw***方法去绘制一些图像图形,绘制的坐标是从Canvas左上角开始计算的,如果想要把一个图像放到某个位置,直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样,如果你传递进去字符串&#xff0c…

Gruntjs: grunt-contrib-jst

预编译Underscore模板到JST文件(Underscore:JS工具库) generate JavaScript template functions Gruntfile的配置实例: 1 module.exports function(grunt) {2 3 grunt.initConfig({4 jst: {5 bulid: {6 …

托马斯反驳牛顿被骂,普朗克颜值过高遭上帝捉弄,狄拉克却因爱情成话痨

全世界只有3.14 % 的人关注了爆炸吧知识今天,小编抑制不住自己,要给大家强烈推荐一个公众号“少年物理学家”!少年物理学家是一个致力为学生家长和老师,提供丰富的物理小知识:物理学家、物理趣谈、科技与物理、万物背后…

Android之滑动事件冲突解决 Touch事件处理机制总结

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP 当屏幕…

php 信号量 关闭,php 信号量

一些理论基础:信号量:又称为信号灯、旗语 用来解决进程(线程同步的问题),类似于一把锁,访问前获取锁(获取不到则等待),访问后释放锁。临界资源:每次仅允许一个进程访问的资源。临界区:每个进程中…

分享:MetaModel 3.2.5 发布,数据库元模型

MetaModel 3.2.5 发布,数据库元模型 http://www.oschina.net/news/36236/metamodel-3-2-5

CALL FOR DUTY 来和我们一起冒险吧!

我们面临的挑战是什么?昨天发了一篇让大家提问Scott Hanselman的问题,有人调侃 (也许是认真的)让我问他:“.NET还有救吗?” ,我的第一反应不是.NET还有没有救,而是该怎么救问这个问题…

HarmoryOS,API9项目配置

官方配置信息讲解如下:文档中心 1、APP名字图标:在entry模块,module.json5文件中 2、module配置 build-profile.json5文件中 3、包名 app.json5

厉害!他33岁破格晋升教授和博导,成果还打破国外技术垄断

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 长江大学新闻网、长江大学石油工程学院、PaperRSS转自 | 学术资源大全他是人到中年"顺意人生"的代表,29岁晋升副教授、33岁破格晋升教授和博导;他独辟蹊径,将"智能"融入石油…

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)1.概述类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对…

开源网站

开源网站: Code Google 谷歌旗下的一个开源项目托管网站,资源很丰富,文档也很齐全,甚至还有中文文档。 Souceforge 国外一个比较有名的开源网站,很多有名的开源项目都是在这个网站托管的。 Github 也很不错的一个开源网…

Android之Volley 源码解析

原文来自:http://www.codekk.com 1. 功能介绍 1.1. Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。 名字由来:a burst or emission of many things or a large amount at once 发布演讲…

双击打开Inventor文件

为什么80%的码农都做不了架构师?>>> 出现的问题: 正常启动电脑后,我双击桌面上的一个idw文件,默认使用 Inventor 2013 打开该格式的文件;但 Inventor 启动不到一半就弹出了如下的错误窗口,点击…

php long2ip,php 中IPV6 ip2long的问题解决办法

在32位系统,ip2long不能转换IPv6,但您可以转换ip2bin和bin2ip 这个函数转换为IPv4和IPv6,返回false,如果是无效的实例程序 代码如下复制代码function ip2bin($ip){if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ! fa…

phpstrom 编辑器设置

http://www.jb51.net/article/58069.htm 配置sublime主题 保存配置的路径为:将Monokai_Sublime.xml拷贝到C:\Users\Administrator\.WebIde100\config\colors,然后重启phpstrom即可 当主题样式选为暗黑色的时候,选中的代码的背景色也会有点暗…

记一次 .NET 某妇产医院 WPF内存溢出分析

一:背景 1. 讲故事上个月有位朋友通过博客园的短消息找到我,说他的程序存在内存溢出情况,寻求如何解决。要解决还得通过 windbg 分析啦。二:Windbg 分析 1. 为什么会内存溢出大家都知道内存溢出对应着 .NET 中的 OutOfMemonryExce…

16世纪的旷世奇才:大学弃医丛数,仅用20年就独立发明了温度计、军事罗盘、天文望远镜,后半生双目失明还能写出惊人科学著作

全世界只有3.14 % 的人关注了爆炸吧知识传说,在崇尚绝对权威的中世纪里,有这么一位敢于质疑权威的年轻人。在比萨斜塔上做了“两个铁球同时落地”的实验,得出了重量不同的两个铁球同时下落的结论。从此推翻了亚里士多德“物体下落速度和重量成…

禅道项目管理软件介绍

使用流程 一、分享的流程图 二、流程图 维护产品及模块 一、如何来添加产品呢?让我们来看下步骤: 以管理员或者其他有产品管理权限的帐号登录。点击产品视图。在页面右侧,点击“新增产品”,即可出来产品添加页面。(第一…

轻松学PHP编程 源代码

http://pan.baidu.com/share/link?shareid170353&uk1191536722 转载于:https://blog.51cto.com/letianwuji/1106854