上一篇博客中介绍了设计模式6大基本原则的前三个,这篇博客将着重介绍剩下的三个基本原则。
里氏代换原则(Liskov Substitution Principle)
子类必须能够替换掉它的父类。也就是说子类可以扩展父类的功能,但不能改变父类原有的功能。
遵循里氏代换原则的好处?
由于子类型的可替换性才使得使用父类的模块在无需修改的情况下就可以扩展。
打个比方说,香蕉是水果的一种,香蕉具有水果的特性。假如有一天我们需要再增加苹果、橘子、苹果拥有水果
的特性,由于都是继承于水果,除了更改实例化的地方程序的其他地方不需要修改。
小编寄语:我觉得里氏代换原则是继承的特殊形式,里氏代换原则对继承做了要求,遵循里氏代换的子类包含
于继承。通过里氏代换原则使扩展性增强,实现了开放—封闭原则。
迪米特法则(Law Of Demeter)
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类
的某一方法的话,可以通过第三者转发这个调用。
问题的由来?
类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
小编寄语:举个例子比如我们去饭店吃饭,我们并不需要直接去找厨师,如果每个人都找厨师说自己吃什么那么
出事的额效率该有多低啊,所以最好的办法是找一个“中介”也就是服务员,顾客通过服务员向厨师传递信息。这样
厨师只管做饭就可以了,饭店的效率就大大提升了。其实也就是降低了顾客和厨师之间的耦合度。又回归到面向对象
的原则上了。
凡是都有个度,比如将所有的信息都通过“中介”来传递信息,那么就会导致“中介”信息信息量变大,系统的
复杂程度加大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。
接口隔离原则(Interface Segregation Principle)
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
怎么实现?
将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
接口隔离与单一职责的区别与联系?
很多人会觉的接口隔离原则跟之前的单一职责原则很相似,其实不然。其一,单一职责原则原注重的是职责;而
接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中
的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序整体框架的构建。
小编寄语:举个例子,接口就好比在十字路口行车,如果没有红绿灯,所有车都自由行使,那么交通必然很是拥
挤,也会事故不断。但如果有了红绿灯,不同的时间人们走不同的路线,将十字路口分了好几个方向,这样效率就会
大大提高。
运用接口原则时要注意:
接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口
数量过多,使设计复杂化。所以一定要适度。
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模
块提供定制服务,才能建立最小的依赖关系。提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。
文末小结
六大设计原则告诉们:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依
赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要
降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。
设计模式的6大基本原则,其实是在面向对象的基础上发展而来的,通过他们实现了面向对象的三大基本特性继
承、封装和多态,从而提高程序的内聚性降低耦合性,使程序可维护、复用、可扩展、灵活性好。但是一切事物都有
个度,在运用这些原则的时候不能一味地生硬的用下去,在用之前一定要好好思量,从系统的整体性能出发,最大限
度地提高系统的灵活性。
原文地址:http://blog.csdn.net/zhangzijiejiayou/article/details/28387323