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.pswp.cn/news/919738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919738.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3源碼reactivity響應式篇之Reactive

概覽 vue3中reactive用于將普通對象轉換為響應式對象&#xff0c;它的實現原理是通過Proxy和Reflect來實現的。具體的實現文件參見packages\reactivity\src\reactive.ts。本文會介紹reactive的相關api如下&#xff1a; reactive&#xff1a;將普通對象轉換為響應式對象readonly…

初識數據結構——Map和Set:哈希表與二叉搜索樹的魔法對決

數據結構專欄 ?(click) 大家好&#xff01;我是你們的老朋友——想不明白的過度思考者&#xff01;今天我們要一起探索Java中兩個神奇的數據結構&#xff1a;Map和Set&#xff01;準備好了嗎&#xff1f;讓我們開始這場魔法之旅吧&#xff01;&#x1f3a9; &#x1f3af; 先…

Unreal Engine UStaticMeshComponent

UnrealUnreal Engine - UStaticMeshComponent&#x1f3db; 定義&#x1f3db; 類繼承? 關鍵特性?? 常見配置&#x1f6e0;? 使用方法&#x1f4da; 在 C 中使用&#x1f4da; 在藍圖中使用&#x1f3ae; 典型應用場景&#x1f4da; 常見子類與用途&#x1f4dd; 小結Unrea…

demo 汽車之家(渲染-篩選-排序-模塊抽離數據)

效果圖展示&#xff1a;代碼截圖注釋詳情實現筆記總體目標&#xff08;按需求點對照代碼&#xff09;數據模塊化、整體渲染框架、篩選/排序的高亮與行為&#xff0c;全部已在 Index.ets CarData.ets 落地。下面按圖片需求 2~4 點逐條總結&#xff0c;并給出關鍵代碼定位與“為…

雙重機器學習DML介紹

本文參考&#xff1a; [1]文心一言回答&#xff1b; 一、核心原理與數學框架 雙重機器學習&#xff08;Double Machine Learning, DML&#xff09;由Chernozhukov等學者于2018年提出&#xff0c;是一種結合機器學習與傳統計量經濟學的因果推斷框架。其核心目標是在高維數據和非…

【圖像算法 - 21】慧眼識蟲:基于深度學習與OpenCV的農田害蟲智能識別系統

摘要&#xff1a; 在現代農業生產中&#xff0c;病蟲害是影響作物產量和品質的關鍵因素之一。傳統的害蟲識別依賴人工巡查&#xff0c;效率低、成本高且易出錯。本文將介紹如何利用深度學習與OpenCV構建一套高效的農田害蟲智能識別系統。該系統能夠自動識別10類常見農業害蟲&a…

循環神經網絡實戰:GRU 對比 LSTM 的中文情感分析(三)

循環神經網絡實戰&#xff1a;GRU 對比 LSTM 的中文情感分析&#xff08;三&#xff09; 文章目錄循環神經網絡實戰&#xff1a;GRU 對比 LSTM 的中文情感分析&#xff08;三&#xff09;前言數據準備&#xff08;與 LSTM 相同&#xff09;模型搭建&#xff08;GRU&#xff09;…

學習游戲制作記錄(制作提示框以及使用鍵盤切換UI)8.21

1.制作裝備提示框創建提示框&#xff0c;添加文本子對象&#xff0c;用來描述名稱&#xff0c;類型以及屬性加成掛載垂直分配組件和文本大小適配組件&#xff0c;這樣圖像會根據文本大小來調整自己創建UI_ItemTip腳本并掛載在文本框上&#xff1a;[SerializeField] private Tex…

chapter07_初始化和銷毀方法

一、簡介 一個Bean&#xff0c;在進行實例化之后&#xff0c;需要進行兩種初始化 初始化屬性&#xff0c;由PropertyValues進行賦值初始化方法&#xff0c;由ApplicationContext統一調用&#xff0c;例如加載配置文件 Bean的初始化與銷毀&#xff0c;共有三種方式&#xff08;注…

open webui源碼分析6-Function

一、Functions簡介 可以把Tools作為依賴于外部服務的插件&#xff0c;Functions就是內部插件&#xff0c;二者都是用來增強open webui的能力的。Functions是輕量的&#xff0c;高度可定制的&#xff0c;并且是用純Python編寫的&#xff0c;所以你可以自由地創建任何東西——從新…

C2039 “unref“:不是“osgEarth::Symbology::Style”的成員 問題分析及解決方法

在osgEarth2.10中實現多線段連續測量功能時,遇到下圖中的錯誤; 經過測試和驗證,主要問題出現在下圖圈出代碼的定義上 圖22-1 對于22-1中的兩個變量這樣定義是錯誤的。因為Style類沒有繼承自osg::Referenced,因此不能與osg::ref_ptr配合使用

GitHub 熱榜項目 - 日榜(2025-08-19)

GitHub 熱榜項目 - 日榜(2025-08-19) 生成于&#xff1a;2025-08-19 統計摘要 共發現熱門項目&#xff1a;12 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術熱點&#xff1a;1&#xff09;AI原生開發持續爆發&#xff0c;Archon OS、Parlant等…

ingress 配置ssl證書

模擬環境舉例&#xff1a; # 生成帶 OU 的證書配置文件 cat > csr.conf <<EOF [ req ] default_bits 2048 prompt no default_md sha256 distinguished_name dn[ dn ] C CN ST Beijing L Beijing O YourCompany, Inc. # 組織名稱 (必填) OU DevOps De…

Pandas 合并數據集:concat 和 append

文章目錄Pandas 合并數據集&#xff1a;concat 和 append回顧&#xff1a;NumPy 數組的拼接使用 pd.concat 進行簡單拼接重復索引將重復索引視為錯誤忽略索引添加多級索引&#xff08;MultiIndex&#xff09;鍵使用連接&#xff08;Join&#xff09;方式拼接append 方法Pandas …

2025年5月架構設計師綜合知識真題回顧,附參考答案、解析及所涉知識點(七)

本文主要回顧2025年上半年(2025-5-24)系統架構設計師考試上午綜合知識科目的選擇題,同時附帶參考答案、解析和所涉知識點。 2025年5月架構設計師綜合知識真題回顧,附參考答案、解析及所涉知識點(一) 2025年5月架構設計師綜合知識真題回顧,附參考答案、解析及所涉知識點(…

面向RF設計人員的微帶貼片天線計算器

微帶貼片天線和陣列可能是僅次于單極天線和偶極天線的最簡單的天線設計。這些天線也很容易集成到PCB中&#xff0c;因此通常用于5G天線陣列和雷達等高級系統。這些天線陣列在基諧模式和高階模式下也遵循一組簡單的設計方程&#xff0c;因此您甚至可以在不使用仿真工具的情況下設…

明基RD280U編程顯示器深度測評:碼農的「第二塊鍵盤」竟然會發光?

文章目錄前言一、開箱篇&#xff1a;當理工男遇到「俄羅斯套娃式包裝」二、外觀篇&#xff1a;深空灰的「代碼容器」1. 桌面變形記2. 保護肩頸的人體工學設計三、顯示篇&#xff1a;給代碼做「光子嫩膚」1. 28寸超大大屏 3:2屏比 4K超清2.專業編程模式&#xff0c;讓代碼一目…

算法114. 二叉樹展開為鏈表

題目&#xff1a;給你二叉樹的根結點 root &#xff0c;請你將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該同樣使用 TreeNode &#xff0c;其中 right 子指針指向鏈表中下一個結點&#xff0c;而左子指針始終為 null 。 展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。…

智慧能源管理系統:點亮山東零碳園區的綠色引擎

一、概述在全球積極踐行“雙碳”目標的時代浪潮下&#xff0c;山東作為經濟大省&#xff0c;正全力推動產業的綠色變革&#xff0c;零碳園區建設成為其中的關鍵一環。《山東省零碳園區建設方案》明確規劃&#xff0c;到2027年建成15個左右省級零碳園區 &#xff0c;到2030年進一…

分布式日志分析平臺(ELFK 與 EFK)理論

一、日志分析平臺核心概念在分布式系統中&#xff0c;日志是系統運行狀態監控、問題排查和業務分析的重要依據。隨著系統規模擴大&#xff0c;單機日志管理方式已無法滿足需求&#xff0c;分布式日志分析平臺應運而生。其核心目標是實現日志的集中收集、統一處理、高效存儲和可…