【设计模式】依赖倒转原则
依赖倒转原则
定义:
A:高层模块不应该依赖低层模块。两个都应该依赖抽象
B:抽象不应该依赖细节。细节应该依赖抽象
(换言之,要针对接口编程,而不是针对实现编程)
什么叫对接口编程呢,什么又叫对实现编程呢?
说一个非常简单的例子。每个人的电脑都会有鼠标,键盘,我拔下鼠标插口,键盘依然能用;我拔下键盘插口,鼠标也依然能用,它们两者是毫无关系的,只是根据拔下哪个接口来判断哪个是否可以使用,拔下鼠标丝毫不影响键盘的使用,反之也一样。
类似于整个电脑的主板是一个大的应用程序,然后将鼠标、键盘、内存条、显卡、硬盘等等封装成各自的类,这样的话不管你删除或添加哪一个类都不会影响到其他的类的正常运行。如果你要针对实现编程呢?假如你的内存条坏了,你要买新的内存条就要对应到具体的某个品牌的主板,就算内存条跟主板一样了,那还有硬盘、显卡、鼠标、键盘呢!那就会出现换一个零件需要把主板也换了的尴尬
里氏代换原则
在生活中你想借花献佛吗?来学学里氏代换原则吧
我喜欢动物,那我一定喜欢乌龟,因为主人都老死了,它还可能正值青年,伤心让它伤心去吧。乌龟是动物的子类,我喜欢乌龟,但是不能就说我喜欢动物,我讨厌蛇,蛇也是动物。
在软件中将一个基类对象替换成它的子类对象,程序不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。也就是说在程序中尽量使用父类来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象
好,借花献佛就要来了,上面说了,父换子,程序不报错,子换父就不行。所以我们在运用里氏代换原则时,让子类继承父类或实现父类接口,运行时,子类实例替换父类实例,我们很方便的扩展系统功能,同时无须修改原有子类的代码,增加新的功能可以通过在子类中实现。
你想追一个女生,你自己没有汽车,但你可以开你父亲的汽车,这就是子类实例替换父类实例;开车过程中你想让女生对你的印象深刻,于是你开始甩尾飘移,秀车技,这就是在子类中增加了新的功能。借你父亲的车来达到你想要的目的,你说这是不是借花献佛呢?
里氏代换:子类型必须能够替换掉它们的父类型
对于这样一个帅气博主,你是否喜欢呢?欢迎给博主留言!!!