很多初学Java的同学都不知Java接口interface到底用什么作用,为什么需要这样一个概念。在知乎上也回答过类似的问题。这里再简单记录一下,供各位同学参考。注意,接口相关的设计思想是面向对象设计的一个精华所在,这里只是一个面向初学者的简单阐述。

1. 接口是一种规范

下面这张图是我们生活中遇到的接口:电源插座接口。

没错!它就是一种规范,中国2010年制定的插座标准。

2. 为什么需要规范呢?**

因为有了接口规范:

  • 任何电器只有有符合规范的插头,就可以获得电力

  • 任何厂家(西门子插座,TCL插座,公牛插座...)按照规范进行制作,就能进行供电

每个厂家插座的生产技术、工艺都不一样,因为接口的implementation可以不一样,但是并不影响电器的正常工作。插座的内部实现对于电器来说是完全屏蔽的。

对于软件开发是类似的:

  • 按照接口规范进行方法调用,就能获得所期望的功能

  • 按照接口规范实现接口的的方法,就能提供所期望的功能

接下来是重点了:

  • 软件开发大多是一个协作性的工作:电器和插座分别是不同人完成的,有了接口大家就能分头开干,都按照接口来办事,各自做完就能轻松地整合到一起。各部分的测试也更加方便。
  • 软件需要不断演化:今天你用了公牛的插座,过了一年你可能换个西门子的插座,要做没有这套国家接口标准,各自为政,那估计你是换不了插座了。你想想,咱们每次去美国出差,都得带个转接头,否则就跪了,多不方便啊,因为接口规范不同啊!(这些个转接头你是不是闻道一种浓浓的Adapter模式的味道)。

3. 什么时候需要通过接口建立规范**

为了抽象系统的某种公共行为,或者封装变化性,进行系统设计的时候你需要抽取出接口,这样将来你的系统将更加灵活。

直接写实现的方式在确定性的场景下当然也可以,不涉及到分工协作、变化性、测试方便等因素时,当然用不着接口了。比如一般情况下你犯不着为一个Pojo的getter和setter也弄个接口和实现分离。

所以面向对象的大神们孜孜不倦地教导我们说:接口和实现分离,面向接口编程

登录发表评论 注册

反馈意见