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>)转换为可以在屏幕上显示的列表项视图。


最后,

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

相关推荐
.鸣7 分钟前
Java学习笔记:IDEA简单使用技巧
java·学习
2501_9167665411 分钟前
【IDEA2017】使用设置+创建项目的不同方式
java·intellij-idea
kyle~11 分钟前
C++---多态(一个接口多种实现)
java·开发语言·c++
funfan051714 分钟前
IDEA基础配置优化指南(中英双版)
java·ide·intellij-idea
罗小爬EX15 分钟前
在IDEA中设置新建Java类时自动添加类注释
java·intellij-idea
vvilkim31 分钟前
深入理解 Spring Boot Starter:简化依赖管理与自动配置的利器
java·前端·spring boot
柯南二号38 分钟前
【Java后端】【可直接落地的 Redis 分布式锁实现】
java·redis·分布式
1点东西1 小时前
新来的同事问我当进程/机器突然停止时,finally 到底会不会执行?
java·后端·程序员
Aspartame~2 小时前
K8s的相关知识总结
java·容器·kubernetes
寒士obj2 小时前
MyBatis-Plus基础篇详解
java·mybatis