基于接口而非实现编程的设计思想,首先理解接口是什么?
广义上“接口”有两类,第一类是面向对象编程语言中的抽象类(如java中的interface类、abstract类),第二类是两个系统或服务之间的API或协议等。
那么为什么要基于接口而非实现编程,这样做有什么好处?
基于接口而非实现编程,将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统或服务(简称上游)面向接口,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游的代码基本上不需要做改动,以此来降低代码间的耦合性,提高下游代码的扩展性。简单理解就是增加了上游的稳定性,降低上下游的耦合性,提高了下游的扩展性。
为什么上游会更稳定性?
上游基于下游的接口进行开发,接口是实现的高度抽象,不会经常变化,而且编写简单。只要接口不变,下游的实现不管如何修改都不会影响到上游。
为什么会降低上下游的耦合性?
接口是稳定的且可以先于实现提供,只要上下游定义好接口,就可以分别开发。不仅如此,对于第二类“接口”还可以分别编译、部署。
为什么提高了的扩展性?
一个接口可以有多个实现,通过添加不同的实现,为上游提供更多的变化。不仅如此,对于第二类“接口”还可以提供更多方法,给上游更多的选择。