这个问题在我刚工作的时候也想过,没有被需求折磨的时候,真的觉得interface好像没啥用,现在做的需求多了,改的需求多了,你走的冤枉路也就多了,很多时候改需求改疯了你就会想,要怎么做才能让自己做的功能适应各种复杂情况,慢慢的就体会到了interface的作用
interface最大的作用就是它代表了一种约定,规范
举个例子,如果不适用interface,那么你写一个功能就是写一个具体的类,只有方法实现,这样做的坏处和局限是什么呢?
你写的功能很死板,如果将来要改动,牵一发动全身,改一个地方,很多地方会跟着一起改动,基本就成了面向过程编程
学习的时候老师可能给你举过这种例子,一块电脑主板,它上面有很多的插口,你看见的市面上绝大部分的主板是不是内存插口都一样,你买不同品牌的内存条都能通用。就是因为主板生产商都遵守了同一种内存插口规范,主板生产商不管你内存条到底是使用的什么工艺,怎么工作的,只要符合同一种规范,插上内存条就能工作
用代码来说明的话就是这样
下面这个是没有使用interface的情况下,主板调用内存条,存放CPU数据到内存的场景
![](https://i-blog.csdnimg.cn/blog_migrate/5e72067eed44206ee1f44fb8f634cc0d.png)
不使用interface就是这样了,初步看上去可能没有什么问题,但是现在问题来了
如果你的主板Board类要使用其它内存呢?
![](https://i-blog.csdnimg.cn/blog_migrate/3102aa297aa5d41b1b512243d2a2a9e3.png)
需要改动的地方就非常多了,几乎是重写主板和内存条相关的所有代码,这种情况你可能遇到过,多重复几次这样的工作,会不会崩溃?
如果使用interface来编程呢,会是什么样?
首先用interface类规定内存的规范
![](https://i-blog.csdnimg.cn/blog_migrate/8529f080f52149dcdffd53661d15a102.png)
实现内存规范的king内存条
![](https://i-blog.csdnimg.cn/blog_migrate/ff3ba7e47c563e4bdab69d2aff33bc3a.png)
实现内存规范的tom内存条
![](https://i-blog.csdnimg.cn/blog_migrate/1f11dce83e97b9fe3c28a908926a0693.png)
最后对你的主板进行修改
![](https://i-blog.csdnimg.cn/blog_migrate/697fd6adc6ba8566fa8e52b57990aec0.png)
这个就是改完之后的主板代码
如果现在要更换其它内存条呢?
![](https://i-blog.csdnimg.cn/blog_migrate/3b9e0f6ed2f10401fd269b024ca82b41.png)
只需要修改方框里面的对象名称就可以了,其它代码都不需要更改,不管以后用什么内存,都只需要改这一句,感觉是不是简单规范了很多?
这就是规范的好处,使你的代码复用性更高,耦合度更低,修改代码的成本更低,也减少了需求修改带来的工作量