问题
接口是Java中一个很重要的去重复代码,扩展功能的概念。以往只知道怎么使用它,却不知道为什么用它,在什么时候用它。本篇文章是在博主进行了两个项目实战之后,从Android源代码及自己的代码中参悟出来的,接口的存在意义及使用场合。
接口的概念
接口是对方法的抽象,它的成员只有方法。它是对“会干什么”的一种抽象策略。
接口的应用
在实际使用中会遇到不同的类,不同的方法中都会有相同的处理方法,比如无论是同步还是异步网络通信最终都会有成功、失败的处理方法,而这些方法中具体的处理是不一样的。因此如果此时构建一个Result接口其中包含两种方法OnSuccess,OnFailure那么我们就增加一个接口的参数就可以很方便的将这两种处理方法抽象出来。而这只是接口的一种使用场合而已。
适配器设计模式
接口还有另外一个特点,可以多继承及多实现。继承和实现本来就是为了解决重复代码,扩展功能而存在的,如今有多了一个“多”字,使这两个功能大大的加强了。也就是说,只要有需要扩展功能的场合就需要用接口。比如有一个方法可以接收的类有很多,但是又不是所有的类,而是“只要这个类会干什么”,它就可以被接收。这么一来,这个方法的功能被提高了许多。其中适配器设计模式就是使用了接口的这一功能。
就拿ListView来讲,我们且不论其内部具体是如何实现显示许多数据,并且可以随着数据的增加来增加显示的组件。我只需要知道它需要扩展自己的使用范围即可。我们只要将ListView在显示数据的操作所要求的相同的处理方法抽象出来成为一个接口,只要其他类符合这个接口中条件就可以放入ListView中显示出来。
查看ListView的源码之后发现Android工程师是将getCount(),getItemsId(),hasStableId()等等六七个方法抽象出来成为一个ListAdapter接口,而ListAdapter又是Adapter的接口子类。因此,只要是ListAdapter的接口实现类都可以放入ListView中来显示。这就大大扩展了ListView的使用范围。
适配器模式总结
而所谓适配器模式也就是如此。首先有一个需要接收外部数据的主体,为了尽可能的扩展可接收数据的范围,将这些数据的特征抽象出来,抽象成“你只要可以怎么样,我就接收你”的接口实现类。因此适配器模式有三个要素:
1、主体
2、接口
3、接口实现类的数据
接口总结
总结一下,接口是对方法的抽象,是为了解决方法的重复代码,是为了复用方法。因此,只要有这样的应用需求就可以使用接口。