看了一下书,还是慢慢感受到了面向对象编程的强大,依赖倒转原则的思想主要是:面向抽象(接口)编程,而不是针对细节编程。面向抽象编程的自己理解就是先将某个具体的事物先扩大,抽象成一类事物,先对这一类事物进行编程,然后再缩小,继承抽象类。考虑具体的事物,这样有利于扩展,灵活。如果是开始针对细节编程的话,那么写了一个具体的事物之后,又来了一个具体的事物,这时你又要重新写,不容易扩展,如果事物多了那么就特别的混乱,要修改某一个功能,那么整个的程序都要在修改一遍,那么天天都有班加了。
面向对象的设计:程序中的所有依赖关系都是终止于抽象类或者接口;反之,就是过程化的设计了。
看到书上有一个例子很好,先记下,可以加深理解。
电脑上的主板中有cpu,内存条,硬盘等等,开始刚买回来的电脑用的好好的,有两个内存条,可是有一天突然就蓝屏了,这种情况最主要的罪魁祸首还是内存条,那么如果知道这种情况,那么很可能就需要换一个内存条了,这时你不可能说去换一个cpu,因为cpu不涉及这一块,它们的职责是单一的,明确的,所以你只需要去买一个新的内存条。这时,你走进商场问工作人员你想要一内存条,找到适合你的内存条后,不管它是哪一个厂家生产的,你直接就插进插槽口了,这是因为他们的大小和插槽是一样大的,这就说明了一个问题:不管你用哪一个厂家生产的,他们的大小是固定的,因为他们是按照插槽的大小生产的,这时,内存条的插槽大小就好比是一个接口,只要这个接口固定了,那么所有生产内存条的厂家都必须做成这样的,否则就留着自己用吧。而进一步扩大,笔记本所有的主板的内存条的大小都是一样的,所以它好比是抽象的,所有的笔记本的都必须是这样子的,这样就统一了,内存条坏了你就可以换一个内存条,而不是把整块主板都换了。如果是这样的话,估计我们都要哭了。所以说:只要接口稳定,那么任何一个更改都不用担心了。
里氏代换原则:子类型必须能够替换掉它们的父类型。意思是:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说:在软件里面,把父类都替换成它的子类,程序的行为没有变化。
只有当子类可以替换到父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性使得使用父类类型的模块在无需修改的情况下可以扩展。
原文链接:https://www.f2er.com/javaschema/285093.html