設計模式詳解(六):適配器模式——Adapter

目錄導航

  • 適配器模式及其作用
    • 現實生活舉例
  • 適配器模式的好處
  • 適配器模式的實現
    • 關系圖
    • 實現步驟
  • 適配器模式的適用場景
  • 適配器模式示例

適配器模式及其作用

適配器模式是一種結構型設計模式。所謂結構型是指在代碼結構方面的設計模式。適配器模式作為中間層,可以讓交互接口不兼容的兩個類或模塊間正常交互協作。雙方只面向適配器工作,無需關心適配器的另一端是誰及其工作方式。

現實生活舉例

蘋果電腦是沒有USB插孔的,如果想要連接USB插頭的設備,必須使用適配器。對于蘋果電腦來說,與滿足自身接口協議的適配器交互,不知道也不關心在適配器的另一端的設備的交互協議是怎樣的。對于USB設備來說,只與適配器的USB插口交互,同樣也不關心另一端的情況。在這里插入圖片描述

適配器模式的好處

  • 可以讓接口不兼容的兩個模塊交互。當交互的雙方接口不兼容時,如果不愿修改已有代碼的功能,因為變更意味著風險,可能引入bug,另外,有可能根本沒有權限修改,比如一方是第三方類庫。此時使用適配器模式,可以讓雙方無縫對接。
  • 單一職責。交互的雙方專注于自己的主責,將交互設計與數據轉換分離到Adapter中。

適配器模式的實現

關系圖

交互主動方稱為Client,交互被動方稱為Service。
在這里插入圖片描述

實現步驟

  1. 根據交互主動方Client所要求的交互方式和數據格式,聲明Adapter接口,定義一組交互方法。
  2. 定義一個Adapter類,內部持有一個Service對象,所有的交互方法基于Service的功能實現。
  3. Client內部持有一個成員變量,類型為Adapter接口類型,可接收任何遵循Adapter接口的對象。
  4. 當不同的Service想提供服務時,創建新的Adapter接口實現類,基于該Service,遵循Adapter接口實現服務功能。

適配器模式的適用場景

  • 想要接口不兼容的兩方交互,而不用修改兩方的代碼。可以使用適配器作為中間者,建立溝通的橋梁
  • 設計一個工具類或功能模塊,根本無法預知交互方的交互方式及數據格式,但自身的工作流程及依賴功能已知,此時可將依賴的功能抽象成適配器接口,完成自己的實現。想要與之溝通的類或模塊,創建遵循該適配器接口的適配器,提供相應功能。

適配器模式示例

Android中,RecyclerView便使用了適配器模式。RecyclerView作為UI組件,只負責展示數據,至于數據的來源,獲取方式(如數據庫、網絡、內存),完全不關心,也無法預知。所以定義了獲取數據的Adapter接口,想要為Recycler提供數據,需定義一個類,實現Adapter接口,提供展示的數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19372.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19372.shtml

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

相關文章

Vue3 圖片或視頻下載跨域或文件損壞的解決方法

Vue3 圖片或視頻下載跨域或文件損壞的解決方法 修改跨域配置文件下載方法 修改跨域配置文件 修改vite.config.ts文件proxy里面寫跨域地址,如下圖,圖片地址就是我們要跨域的目標地址: 下載方法 如下就是我取消上面那句后的報錯 然后調用兩…

【C++風云錄】C++與智能交通:智能交通系統與車聯網

解鎖C的力量:在智能交通系統與車聯網中使用關鍵庫 前言 本文關注于C在智能交通系統與車聯網中的應用,并提供了五個常見庫的簡介和使用方法。這些庫包括:Veins, SUMO-GUI, OMNeT, NS-3和PLEXE,每個庫都有其獨特的功能和優點&…

【Java】Sping Boot中使用Javax Bean Validation

目錄 Javax Bean Validation在Spring Boot中集成Javax Bean Validation使用案例功能測試配置全局異常處理器重新測試返回特定形式的信息方式一方式二 附:常用的注解 Javax Bean Validation Javax Bean Validation是Java平臺的一項規范,旨在提供一種簡單…

想知道股指期貨和期權有什么不同嗎?

市場上目前有中金所的滬深300ETF,中證500和中證1000股指期貨,期權市場有上證50ETF,滬深300etf和中證500ETF期權,股指期貨和期權在買賣雙方的權利義務、風險收益特征、保證金制度、上市合約數量等方面均有較大區別,下文…

每天學點小知識:Windows終端Powershell美化

前言 本章的旨在教會你美化自己的終端,powershell需要以管理員運行 經過我的測試,不同的電腦可能會有不同的報錯,具體操作根據官方為主https://ohmyposh.dev/docs 效果展示 Oh My Posh:提供美觀的 PowerShell 提示符主題 1.安裝…

揭秘CISA:你不知道的信息安全認證,輕松掌握職場先機!

在當今的信息化時代,信息系統的安全和穩定是企業和組織的重要資產。信息系統審計是一項專業的工作,需要具備豐富的知識和經驗,以及敏銳的洞察力和判斷力。信息系統審計師是信息系統審計領域的專業人士,他們負責對信息系統的設計、…

MVVM模式的優點以及與MVC模式的區別?

1.MVVM 模式的優點: 1 、低耦合: 視圖( View )可以獨?于 Model 變化和修改,?個 ViewModel 可以綁定到不同的 "View" 上,當 View 變化的時候 Model 可以不變,當 Model 變化的時…

【OpenGL實踐12】關于緩存區Framebuffer的運用

文章目錄 一、說明二、幀緩沖區三、創建新的幀緩沖區四、附屬裝飾4.1 紋理圖像4.2 渲染緩沖區對象圖像 五、使用幀緩沖區5.1 后期處理5.2 更改代碼 六、后期處理效果6.1 色彩處理6.2 模糊6.3 Sobel算子 七、結論練習 一、說明 關于FrameBuffer的使用,是OpenGL的高級…

橫截面分位數回歸

一、分位數回歸簡介 分位數回歸(英語:Quantile regression)是回歸分析的方法之一。最早由Roger Koenker和Gilbert Bassett于1978年提出。一般地,傳統的回歸分析研究自變量與因變量的條件期望之間的關系,相應得到的回歸…

AI時代的服裝設計師--AIGC

AI時代的服裝設計師--AIGC AIGCAIGC設計能替代真正的設計師嗎森馬T恤設計AIGC優勢、優化 本文記錄于去年參加的一次森馬T恤設計活動的感受。 AIGC 可以說,近期以來,隨著ChatGPT的不斷發展,從ChatGPT-3到ChatGPT-4的飛速發展,AIGC…

Windows和Linux系統部署Docker(2)

目錄 一、Linux系統部署docker 前置環境: 1.安裝需要的軟件包, yum-util 提供yum-config-manager功能 2.添加阿里云 docker-ce 倉庫 3.安裝docker軟件包 4.啟動 docker并設置開機自啟 5.查看版本: 二、windows系統部署docker 1.查看…

Type ‘null‘ is not assignable to type ‘T‘. - ArkTSCheck

設置泛型將參數配置為 null 時拋出了如下異常: Type null is not assignable to type T. T could be instantiated with an arbitrary type which could be unrelated to null. <ArkTSCheck> 解決辦法 在 null 后面添加 ! 即可,以表示該值不會為 null data: T null! 以…

Qt 基于FFmpeg的視頻轉換器 - 轉GIF動圖

Qt 基于FFmpeg的視頻轉換器 - 轉GIF動圖 引言一、設計思路二、核心源碼三、參考鏈接 引言 gif格式的動圖可以通過連續播放一系列圖像或視頻片段來展示動態效果&#xff0c;使信息更加生動形象&#xff0c;可以很方便的嵌入到網頁或者ppt中。上圖展示了視頻的前幾幀轉為gif動圖的…

隨身WIFI 路由器等嵌入式Linux 編程器固件解包打包

一、固件提取 (1)直接使用CH341A編程器提取全量包,適合于無adb場景 (2)使用adb 、dd工具提取rootfs分區,通常是mtd4,一般我們也只需要修改rootfs 二、firmware 分析 Ubuntu18.04及以上,低版本需解決很多依賴問題 安裝python3和pyhton3-pip 1.下載工具 ?git clo…

基于Paraformer的alpha-token強制對齊

1. 基本原理 CIF 作為Parafoemr的核心模塊&#xff0c;用于預測字數和生成聲學向量&#xff0c;從而實現了單輪非自回歸解碼。其中字數的預測主要通過encoder輸出系數alpha的累計得分&#xff0c;滿足通關閾值β1.0即可產生一個token&#xff0c;其中alpha曲線在一定程度上呈現…

Android12.0 SIM卡語言自適應

文章目錄 需求語言設定Settings中語言切換流程檢測到SIM卡&#xff0c;更新系統語言最終修改 需求 要求系統語言跟隨SIM卡的語言變化。 語言設定 (1)系統預置語言, 即在makefile中指定的語言 (2)重啟, 如果未插卡, 則系統語言為預置的語言 (3)重啟插入SIM卡開機, 會自適應為…

【前端】vue+element項目中select下拉框label想要顯示多個值多個字段

Vue Element項目中select下拉框label想要顯示多個值 <el-selectv-model"form.plantId"collapse-tagsfilterableplaceholder"請選擇品種種類"style"width: 270px;"><el-optionv-for"item in plantIdArray":key"item.id&…

前端首屏加載速度慢問題?怎么解決

前端首屏加載速度慢是用戶體驗中的一個關鍵問題&#xff0c;它直接影響用戶對網站的第一印象以及用戶留存率。首屏加載時間是指從用戶輸入網址到頁面首屏內容完全呈現在用戶面前所需的時間。這個指標對于搜索引擎優化&#xff08;SEO&#xff09;和用戶體驗都至關重要。下面將探…

CSS:浮動

? 文檔流&#xff1a; 由于網頁默認是一個二維平面&#xff0c;當我們在網頁中一行行擺放標簽時&#xff0c;塊標簽會獨占一行&#xff0c;行標簽則只占自身大小&#xff0c;這種情況下要實現網頁布局就很麻煩了&#xff0c;所以我們就需要通過一些方法來改變這種默認的布局方…

centos7離線安裝pthon3.8

centos7離線安裝pthon3.8 因服務器無外網環境&#xff0c;所以事先需要把所有離線的依賴都準備好。 安裝前的準備 先在有外網環境的機器上準備依賴 安裝 centos-release-scl 第三方yum源 yum install centos-release-scl安裝 yum 依賴下載插件 yum install yum-plugin-do…