设计模式-依赖倒转原则

版权声明:转载请注明出处。 https://blog.csdn.net/baidu_38304645/article/details/84783849

在我们进行电脑的维修时,如果哪一部分出了问题,我们只需要更换这一个部分就可以了,比如内存出了问题,我们只需要更换内存,不需要更换主板。由于PC易插拔的方式,那么不管哪一个出问题,都可以在不影响别的部件的前提下修改或替换。

在PC电脑里叫易插拔,面向对象里把这种关系叫做强内聚,松耦合。比如CPU,只要把接口定义好,内部再复杂也不让外界知道,而主板只需要预留与CPU针脚的插槽就可以了。

依赖倒转原则:高层模块不应该依赖低层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。

说白了,就是要针对接口编程,不要对实现编程。

在用C语言进行面向过程开发时,为了使得常用代码可以复用,一把会把这些常用代码写成许多函数的程序库,这样做新项目时,去调用这些低层的函数就可以了。比如把访问数据库的代码写成了函数,每次做新项目就去调用这些函数,这也就叫做高层模块依赖低层模块。

这样做是有问题的。我们做新项目时,发现业务逻辑的高层模块都是一样的,但客户却希望使用不同的数据库或存储信息方法,这时就出现麻烦了,我们希望再次利用这些高层模块,但高层模块都是与低层的访问数据库绑定在一起的,没办法复用这些高层模块,这就很糟糕了。

反之,如果不管高层模块还是低层模块,它们都依赖于抽象,具体一点就是接口或抽象类,只要接口是稳定的,那么任何一个的更改都不同担心其他收到影响,这就使得无论高层模块还是低层模块都可以很容易地被复用。这才是最好的办法。

为什么依赖了抽象的接口或抽象类,就不怕更改呢?

里氏代换原则:子类型必须能够替换掉它们的父类型。

只有当子类可以代替掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为,

由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

依赖倒转其实就是谁也不要依赖谁,除了约定的接口,大家都可以灵活自如。

依赖倒转起始可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计了。

猜你喜欢

转载自blog.csdn.net/baidu_38304645/article/details/84783849