Android 开发中的适配器模式
1. 什么是适配器模式?
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换为客户端期望的另一种接口,从而使原本由于接口不兼容而无法一起工作的类可以协同工作。
简单类比:
- 插头转换器:假如你的手机充电器是美标插头,但墙上的插座是欧标插孔,那么需要一个适配器(转换器)来兼容两者。
2. 适配器模式的核心组成
- Target(目标接口):定义客户端所需的接口。
- Adaptee(适配者类):需要适配的现有类,接口不兼容客户端。
- Adapter(适配器类):实现
Target接口,通过组合或继承Adaptee,将Adaptee的功能转化为客户端所需的功能。
3. UML 类图

图示说明:
1. Target 是客户端所需的标准接口。
2. Adaptee 是需要适配的现有类。
3. Adapter 通过组合或继承 Adaptee,将其方法适配为 Target 的接口。
4. 代码示例:Android 中的适配器模式
场景:在 Android 中,有一个旧的 LegacyMediaPlayer 只能播放 .mp3 文件,而客户端希望通过统一的 MediaPlayer 接口播放各种格式(如 .mp3 和 .mp4)。
// Target: 客户端需要的接口
interface MediaPlayer {
void play(String fileName);
}
// Adaptee: 旧的播放器,功能有限
class LegacyMediaPlayer {
public void playMp3(String fileName) {
System.out.println("播放 MP3 文件: " + fileName);
}
}
// Adapter: 适配器,实现统一接口
class MediaAdapter implements MediaPlayer {
private LegacyMediaPlayer legacyMediaPlayer;
public MediaAdapter(LegacyMediaPlayer legacyMediaPlayer) {
this.legacyMediaPlayer = legacyMediaPlayer;
}
@Override
public void play(String fileName) {
if (fileName.endsWith(".mp3")) {
legacyMediaPlayer.playMp3(fileName);
} else {
System.out.println("无法播放该文件格式: " + fileName);
}
}
}
// Client: 使用统一接口
class ModernMediaPlayer implements MediaPlayer {
private MediaAdapter adapter;
public ModernMediaPlayer(LegacyMediaPlayer legacyMediaPlayer) {
this.adapter = new MediaAdapter(legacyMediaPlayer);
}
@Override
public void play(String fileName) {
System.out.println("Modern MediaPlayer 准备播放...");
adapter.play(fileName);
}
}
// 使用示例
public class AdapterPatternDemo {
public static void main(String[] args) {
LegacyMediaPlayer legacyPlayer = new LegacyMediaPlayer();
//面向客户提供统一接口服务
MediaPlayer modernPlayer = new ModernMediaPlayer(legacyPlayer);
modernPlayer.play("song.mp3");
modernPlayer.play("video.mp4");
}
}
输出:
Modern MediaPlayer 准备播放...
播放 MP3 文件: song.mp3
Modern MediaPlayer 准备播放...
无法播放该文件格式: video.mp4
5. Android 中的实际应用
-
RecyclerView 的 Adapter
RecyclerView.Adapter将数据源转换为可在列表中展示的视图。- Target:
RecyclerView.Adapter接口。 - Adaptee:数据源,例如
List<T>。 - Adapter:具体实现类,绑定数据到
ViewHolder。
- Target:
-
View 适配器:
例如ArrayAdapter或BaseAdapter将数据转换为可用于ListView或Spinner的视图。 -
第三方库集成:
使用适配器模式兼容不同 API(如 Retrofit 中的CallAdapter,实现对返回数据的适配)。
6. 记忆与总结
记忆口诀:
接口不兼容,适配来帮忙,旧的转新的,扩展更通畅。
适配器模式的核心思想是“兼容性”:它通过桥接两个不兼容的接口,让系统变得灵活且易于扩展。
当前文章价值4.45元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章
分类:设计模式
标签:Android常用设计模式, 适配器模式
评论已关闭!