软件设计模式之迪米特法则(Darren)

各位博友晚上好吐舌头

先回顾一下之前学习的设计模式和原则

简单工厂模式,策略模式,单一职责原则,开放封闭原则,依赖倒转原则,装饰模式,代理模式,抽象工厂模式,原型模式(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再见

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑。2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,比如 单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种实现)、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星火燎猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值