面向接口编程

面向接口编程不与面向对象编程同级,而是附属于面向对象编程思想,是面向对象编程思想的精髓之一。

定义

在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。

本质

  1. 接口是一组规则的集合,它规定了实现本接口的类或者接口必须拥有的一组规则。
  2. 接口是在一定粒度视图上同类事物的抽象表示,实现了多态性。

优点

  1. 结构清晰,使用方便。
  2. 提高系统的灵活性,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。
  3. 设计合理的接口,有利于程序的规范化,可并行进行开发,从而提高效率。
  4. 实现了程序的可插拔性,对于不同的需求切换不同的实现,降低了耦合度,随着系统的复杂性的提高优势会愈加明显。
  5. 允许多重实现,弥补了继承的缺陷。

缺点

  1. 增加了设计复杂度,不适用于简单的系统。
  2. 可能会降低代码的可复用性。
  3. 可能会降低程序的执行效率。

实现

接口分为底层实现、接口层定义、上层调用三部分。

接口层

  • 接口层是上下层的粘合剂,实现上下层的分离。
  • 接口层通过单例持有底层服务。
  • 底层需要将自己的功能注入给接口层。
  • 上层通过指定的入口调用下层的接口。

底层

  • 底层需要遵循接口层协议,并实现protocol的声明的方法。
  • 底层的服务需要注入到接口层,可以是底层setup时注入,也可以是二方的其他合适的位置注入。

上层

  • 上层只依赖接口层,通过接口层调用底层方法。