背景
本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习《大话设计模式》时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅。
真诚的希望自己能够从一名小菜成长为一名大鸟!
编写的程序应该满足:
1)可维护
2)可扩展
3)可复用
4)够灵活
废话少说,言归正传,设计模式原则之:迪米特原则(最少知识原则)
书面理解
迪米特原则:如果两个类不必彼此直接通信,那么这两个类就应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
迪米特法则强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开,其实就是在封装一个类的时候尽量明确这个类的属性和操作属性的方法。
迪米特法则的根本思想,是强调类自己的松耦合。
类之间的松耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及,换句话说,信息隐藏促进了软件的复用。
个人的理解
迪米特法则也被称之为最少知识原则。所谓最少知识不是这个类的功能越弱越好,前面说过对类定义只要满足单一职责,而是,希望这个类暴露在外面的东西越少越好。以前只知道使用private可以保护成员变量不被外界直接操作,从而增强了类的安全性。现在,发现private不仅有安全性还可以降低类之间的耦合性。当两个类之间没有直接联系的时候,那么这两个类的耦合度会变低,从而更容易扩展了。
生活中的具体实例,小时候很喜欢问数学题,下课后总喜欢拿着数学卷子往数学教学小组办公室跑,因为,不好意思所以每次都是拿着卷子直接找我们的数学授课老师李老师,这就相当于我只认识数学李老师一个人,把其他数学老师都忽略了,那么我和李老师构成了一种直接的依赖关系。结果有一天,李老师有事不在,那么我的问题就不能立刻解决,这时问题来了,其他老师都很闲,而且他们也一定能够帮我解决这个问题,可是因为我只会问李老师,所以错过了解决问题的机会。如果把数学教学小组看做一个抽象的接口,而我直接调用这个接口的方法,那么就是,我去办公室问题老师题目,所有老师当中总有一个会帮我来解决问题。而数学小组的人员构成我不用知道,老师是如何解决我也不用知道,总之这个问题交付给他们,他们就要给出答复。
总结一下,类与类之间调用时,如果一个类需要被扩展,或者预计后期会发生变化,那么最好采用调用这个类的接口,这样面向接口编程而不是面向过程(具体)编程,这样其实解决了类与类之间的直接耦合关系。为了更好的解决这种耦合关系,我们应该尽量把一个类封装得安全私有,一类不必要暴露的属性尽量不要被外界调用,把他设为自己的私有属性或方法。