适配器模式

来源:互联网 发布:数据分析之量化投资 编辑:程序博客网 时间:2024/06/07 12:11

简介

适配器在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的可变性。

List View源码分析

总结

优点:

  • 更好的复用性
    系统需要使用现有的类,而此类的接口不符合系统的需要,那么痛殴适配器模式可以让这些功能得到更好的复用

  • 更好的扩展性
    可以调用自己开发的功能,自然的扩展系统功能。

缺点:

  • 过多使用适配器,系统会变得凌乱,不易把握。例如调用A接口,但是内部却是B接口的实现。