面向接口编程不与面向对象编程同级,而是附属于面向对象编程思想,是面向对象编程思想的精髓之一。
定义
在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。
本质
- 接口是一组规则的集合,它规定了实现本接口的类或者接口必须拥有的一组规则。
- 接口是在一定粒度视图上同类事物的抽象表示,实现了多态性。
优点
- 结构清晰,使用方便。
- 提高系统的灵活性,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。
- 设计合理的接口,有利于程序的规范化,可并行进行开发,从而提高效率。
- 实现了程序的可插拔性,对于不同的需求切换不同的实现,降低了耦合度,随着系统的复杂性的提高优势会愈加明显。
- 允许多重实现,弥补了继承的缺陷。
缺点
- 增加了设计复杂度,不适用于简单的系统。
- 可能会降低代码的可复用性。
- 可能会降低程序的执行效率。
实现
接口分为底层实现、接口层定义、上层调用三部分。
接口层
- 接口层是上下层的粘合剂,实现上下层的分离。
- 接口层通过单例持有底层服务。
- 底层需要将自己的功能注入给接口层。
- 上层通过指定的入口调用下层的接口。
底层
- 底层需要遵循接口层协议,并实现protocol的声明的方法。
- 底层的服务需要注入到接口层,可以是底层setup时注入,也可以是二方的其他合适的位置注入。
上层
- 上层只依赖接口层,通过接口层调用底层方法。