当前位置: 首页 > news >正文

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;  // 显示姓名的TextViewTextView ageView;   // 显示年龄的TextViewpublic UserViewHolder(View itemView) {super(itemView);// 从布局文件中查找对应的视图组件nameView = itemView.findViewById(R.id.tv_name);ageView = itemView.findViewById(R.id.tv_age);}}// 创建新视图时调用@Overridepublic UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// 加载列表项的布局文件View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false);return new UserViewHolder(view);}// 将数据绑定到视图上@Overridepublic void onBindViewHolder(UserViewHolder holder, int position) {User user = users.get(position);  // 获取当前位置的数据holder.nameView.setText(user.getName());     // 设置姓名holder.ageView.setText(String.valueOf(user.getAge()));  // 设置年龄}// 返回数据总数@Overridepublic 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>)转换为可以在屏幕上显示的列表项视图。


最后,

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

http://www.xdnf.cn/news/1332145.html

相关文章:

  • 力扣 hot100 Day79
  • 【ansible】1.介绍ansible
  • 小波变换(详细解释和代码示例)
  • 车载软件架构 --- 赢得汽车软件开发竞赛
  • 【数据集】Argoverse 数据集:自动驾驶研究的强大基石
  • electron进程间通信-从主进程到渲染器进程
  • 芯科科技即将重磅亮相IOTE 2025深圳物联网展,以全面的无线技术及生态覆盖赋能万物智联
  • HTML5 视频与音频完全指南:从基础的 <video> / <audio> 标签到现代 Web 媒体应用
  • 软考网工选择题节选-2
  • 为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
  • 案例分享:BRAV-7123助力家用型人形机器人,智能生活未来已来
  • Java并发容器详解
  • 卸载win10/win11系统里导致磁盘故障的补丁
  • 企业微信2025年发布会新功能解读:企业微信AI——2025年企业协作的「最优解」是如何炼成的?
  • C++编程实践--表达式与语句
  • 第一章:认识 CAD 图形文件 —— DXF 格式
  • 单抗免疫原选型指南|抗体制备方案设计——常用抗原类型及制备方法
  • Spring事务源码
  • c语言多任务处理(并发程序设计)
  • 挑战极限:在256MB内存的机器上构建MySQL极简安装方案
  • 基于SpringBoot的旅游攻略系统网站【2026最新】
  • mysql-8.0.37-linux-glibc2.12-x86_64安装
  • 【shell脚本编程】-7 寻找到在5分钟内改动的文件
  • 【C++】基础:C++11-14-17常用新特性介绍
  • 【Obsidian插件】HiNote
  • ansible playbook 实战案例roles | 实现db2自动安装
  • spring第9课,spring对DAO的支持
  • 【C++】模版(初阶)
  • 【STM32】HAL库中的实现(六):DAC (数模转换)
  • wpf之ComboBox