【设计模式】五:依赖倒置与里氏代换原则

/**
* 依赖倒转原则
* 定义: 抽象不应该依赖细节,细节应该依赖于抽象
* 解释:开发过程中,要学会针对接口编程,不要针对需求进行编程
* 特征:
* 高层模块不应该依赖低层模块,两个都应该依赖抽象
* 抽象不应该依赖细节,细节应该依赖抽象
* 理解:在面向过程开发中,为了使代码复用,经常将常用的代码进行封装成方法提取出来,这样在实现新功能的时候,
* 如果有用来的方法,直接调用该方法就可以了,比如连接数据库,我们将其封装成一个方法,每次需要连接时,
* 高层模块调用这个底层函数就可以了,这个也叫做 【高层模块】依赖【底层模块】;
* 但是高层模块依赖底层模块这样的耦合性还是比较高,比如我们需要连接其他的数据库,或者由mysql转换成orcal了
* 那此时我们封装的函数不适用于当前场景了,那就需要重新开发;
* 但是,如果使高层模块和底层模块都依赖于接口或者抽象类,只要接口和抽象类稳定不变,那么做任何一个更改都不用
* 担心其他受到影响,这样就使用高层模块,底层模块都很容易的被复用,而且不会影响其他的组件
*/

/**
* 里氏代还原则
* 白话翻译:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别
* 也就是说在软件里面,把父类都替换成它的子类,程序的行为都没有变化,简单说就是子类型必须能替换它的父类型
* 而且对程序没有影响
* 特征:只有当子类可以替换掉父类,软件单位的功能不受到影响,父类才能真正被复用,而且子类可以在父类的基础上增加新的行为
*
* 由于有里氏代换原则,才使得开发-封闭成为可能
*
* 正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展
*
*/

/**
* 总结:
* 依赖倒转其实就是谁也不需要依靠谁,除了约定的接口,大家可以灵活自如;
* 依赖倒转其实可以说是面向对象设计的标志,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,
* 即程序中所有的依赖关系都是终止与抽象类或者接口,那就是面向对象的设计了,反正就是过程化的设计
*/
原文地址:https://www.cnblogs.com/rcltocode/p/10615466.html