Android常见设计模式:什么是适配器模式?

2024-11-22 08:17 Android常见设计模式:什么是适配器模式?已关闭评论

Android 开发中的适配器模式

1. 什么是适配器模式?

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换为客户端期望的另一种接口,从而使原本由于接口不兼容而无法一起工作的类可以协同工作。

简单类比:
- 插头转换器:假如你的手机充电器是美标插头,但墙上的插座是欧标插孔,那么需要一个适配器(转换器)来兼容两者。


2. 适配器模式的核心组成

  1. Target(目标接口):定义客户端所需的接口。
  2. Adaptee(适配者类):需要适配的现有类,接口不兼容客户端。
  3. 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 中的实际应用

  1. RecyclerView 的 Adapter
    RecyclerView.Adapter 将数据源转换为可在列表中展示的视图。

    • TargetRecyclerView.Adapter 接口。
    • Adaptee:数据源,例如 List<T>
    • Adapter:具体实现类,绑定数据到 ViewHolder
  2. View 适配器
    例如 ArrayAdapterBaseAdapter 将数据转换为可用于 ListViewSpinner 的视图。

  3. 第三方库集成
    使用适配器模式兼容不同 API(如 Retrofit 中的 CallAdapter,实现对返回数据的适配)。


6. 记忆与总结

记忆口诀:
接口不兼容,适配来帮忙,旧的转新的,扩展更通畅。

适配器模式的核心思想是“兼容性”:它通过桥接两个不兼容的接口,让系统变得灵活且易于扩展。

当前文章价值4.45元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3716.html ,谢谢支持!

资源分享

非常实用的Lenovo G40 Windows8系统进入BIOS收藏手册 非常实用的Lenovo G40 Window
使用gunicorn部署Flask开发的Web项目,关于workers工作进程数设置的问题 使用gunicorn部署Flask开发的W
Python【批量文字转图神器】自适应字体大小,一键生成多张个性图文 Python【批量文字转图神器】自适
Android局域网文件接收工具 Android局域网文件接收工具

评论已关闭!