简介
适配器在Android开发中我们很常见了,ListView,GridView,RecycleView都会有一个适配器Adapter对象。适配器是将两个不兼容的类融合在一起,将不同的东西通过一种转换使得他们能够协调起来。日常生活中我们的笔记本电脑工作电压有的是20V,而我国家用电是220V,那么如何让20V的笔记本电脑可以在220V下工作呢,这时就有一个电源适配器,我们叫做充电器或者变压器。这个时候我们的电脑和家用电就可以兼容了。
定义
适配器模式将一个类的接口,转换为客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
使用场景
系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。
想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的类,包括一些可能将来引入的类一起工作。
UML类图
适配器有两种类型,类适配器和对象适配器模式。
类适配器模式
在类适配器中适配器和适配者是继承关系。
类适配器通过实现Target接口以及继承Adaptee类来实现接口转换。如上Target需要request方法,Adapter通过调用Adaptee的specificRequest方法来实现Target的request。
角色介绍:
- Target:目标角色,是客户期待得到的接口,可以是抽象类或者接口。注意类适配器的目标不可以是类。(因为Java里面不许多继承的)。
- Adaptee:现在需要适配的角色。
- Adapter:适配器角色,必须是具体类。作为一个转换器对Adaptee和Target进行适配。
对象适配器模式
适配器与适配者之间是关联关系。
我们可以看到对象适配器模式中的适配器Adapter包装了一个适配者Adaptee对象,从而可以将Adaptee与Target类的API衔接起来。
对象适配器模式简单实现
以我们的笔记本电脑电压为20V家用电为220V来实现一个可以供我们电脑使用的适配器模式
查看
Android 源码使用适配器模式
adapter这个单词我们做Android开发都比较熟悉,在以前写ListView的时候经常出现。
Q:为什么ListView要使用Adapter模式勒?
A:ListView要显示各式各样的视图,每个人开发的界面效果都不同,Android通过增加一个Adapter来隔离变化,将List View中的ItemView接口抽象到Adapter对象里面,然后在List View内部调用Adapter完成布局等操作。这样用户只要实现Adapter接口,并且设置给List View,就可以显示想要的各种效果。List View重要的问题是解决ItemView的视图的输出,ItemView最终都是View类型,Adapter将ItemView输出为View。这样应对了ItemView的可变性。
总结
优点:
更好的复用性
系统需要使用现有的类,而此类的接口不符合系统的需要,那么痛殴适配器模式可以让这些功能得到更好的复用更好的扩展性
可以调用自己开发的功能,自然的扩展系统功能。
缺点:
- 过多使用适配器,系统会变得凌乱,不易把握。例如调用A接口,但是内部却是B接口的实现。