1. 接口的本质
接口封装了细节
接口对调用者封装了实现细节,调用者只需按接口规范使用,而不关心怎么实现,例如我们最常见的数据库连接接口Connection,当通过某个工具包获取Connection后(如HikariPool或者阿里Druid),调用者并不关心实际获取到的是厂家提供的驱动类,还是被工具包封装之后的代理类。
有接口就意味着有变化点
有接口就意味着有变化点,如果没有变化点,也就不需要定义接口,按照固定逻辑实现即可,照此反推,即-有可能发生变化的逻辑,才适合定义接口。例如Java的集合框架,List,Map,Set都有很多不同实现类,不同的实现类便是不同的变化点,可以满足不同的需要。
接口是一套标准
接口是一套标准,例如插座,手机充电口,插入插座的部分并没有什么不同(注意:这里仅说的是插入的部分),从这个角度看接口就是一个标准,只要符合标准就能适配接口,因此并不是一定要有变化点才能定义接口,标准的接口是为了更加规范,通用。
综上,就是接口的本质,透过这些本质,就很容易知道什么时候需要定义接口。
2. 面向接口编程的优点
从接口的本质实际已经可以看出面向接口编程的优点:
A. 接口稳定,易于扩展
B. 替换接口实现时,修改代价