23种设计模式——适配器模式(Adapter)详解

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 23种设计模式------适配器模式(Adapter) 详解
📚 ** ps ** : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一、背景

[二、 数据模型(被适配的对象)](#二、 数据模型(被适配的对象))

三、适配器实现(核心适配逻辑)

四、使用适配器(Activity代码)

五、适配器模式对应关系


一、背景

你现在可能对于它有些陌生,但是原生安卓app的列表大部分是使用它来实现的!android项目中有太多地方使用过它了(如下图)。正是有了它,才让数据与图片可以在列表中显示。下面,让我们一起揭开它的神秘面纱吧!


二、 数据模型(被适配的对象)

复制代码
public class User {
    private String name;  // 用户名
    private int age;      // 用户年龄
    
    // 构造函数
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // 获取用户名
    public String getName() { return name; }
    
    // 获取用户年龄
    public int getAge() { return age; }
}

这段代码定义了一个简单的User类,包含用户名和年龄两个属性。这个类就是列表中每一列需要显示的数据。


三、适配器实现(核心适配逻辑)

复制代码
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHolder> {
    private List<User> users;  // 存储用户数据列表
    
    // 构造函数,接收数据列表
    public UserAdapter(List<User> users) {
        this.users = users;
    }
    
    // 定义ViewHolder,用于缓存视图元素
    public static class UserViewHolder extends RecyclerView.ViewHolder {
        TextView nameView;  // 显示姓名的TextView
        TextView ageView;   // 显示年龄的TextView
        
        public UserViewHolder(View itemView) {
            super(itemView);
            // 从布局文件中查找对应的视图组件
            nameView = itemView.findViewById(R.id.tv_name);
            ageView = itemView.findViewById(R.id.tv_age);
        }
    }
    
    // 创建新视图时调用
    @Override
    public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 加载列表项的布局文件
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_user, parent, false);
        return new UserViewHolder(view);
    }
    
    // 将数据绑定到视图上
    @Override
    public void onBindViewHolder(UserViewHolder holder, int position) {
        User user = users.get(position);  // 获取当前位置的数据
        holder.nameView.setText(user.getName());     // 设置姓名
        holder.ageView.setText(String.valueOf(user.getAge()));  // 设置年龄
    }
    
    // 返回数据总数
    @Override
    public int getItemCount() {
        return users.size();
    }
}

这段代码是适配器的核心实现:

  1. 继承RecyclerView.Adapter并指定ViewHolder类型

  2. 在构造函数中接收要显示的数据列表

  3. 实现三个必要方法:创建视图、绑定数据、返回数据量


四、使用适配器(Activity代码)

复制代码
// 准备测试数据
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 25));
userList.add(new User("李四", 30));

// 获取RecyclerView控件
RecyclerView recyclerView = findViewById(R.id.recyclerView);

// 设置布局管理器(决定列表如何排列)
recyclerView.setLayoutManager(new LinearLayoutManager(this));

// 创建并设置适配器
recyclerView.setAdapter(new UserAdapter(userList));

其实就是页面代码,里面使用了我明定义的列表。这段代码说了适配器的使用:

  1. 准备要显示的数据

  2. 获取列表控件

  3. 设置列表布局方式

  4. 创建适配器并绑定数据


五、适配器模式对应关系

  • ​Target接口​ ​:RecyclerView.Adapter定义的接口(onCreateViewHolder等方法)

  • ​Adaptee​ ​:List<User>数据列表(原始数据格式)

  • ​Adapter​ ​:UserAdapter类(将数据适配为视图)

  • ​Client​ ​:使用RecyclerView的代码(通过适配器间接使用数据)

这个例子展示了适配器模式如何将数据列表(List<User>)转换为可以在屏幕上显示的列表项视图。


最后,

其它设计模式会陆续更新,希望文章对你有所帮助!

相关推荐
二月夜6 小时前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java7 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
程序员二叉7 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
cfm_29147 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始7 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
许彰午8 小时前
17_synchronized关键字深度解析
java·开发语言
Xzh04239 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
艾利克斯冰10 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马10 小时前
Java新特性:record关键字
java·开发语言
折哥的程序人生 · 物流技术专研11 小时前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘