Java適配器模式 - 靈活應對不匹配的接口

Java適配器模式 - 靈活應對不匹配的接口

引言:
在軟件開發中,我們經常遇到不同系統、庫或框架之間的接口不兼容問題。為了解決這些問題,我們可以使用適配器模式。適配器模式是一種結構型設計模式,它允許不兼容的接口之間進行協作,從而使得原本無法一起工作的類能夠協同工作。本文將介紹Java中的適配器模式,并通過示例代碼展示其用法和優勢。

一、適配器模式的定義與分類

適配器模式(Adapter Pattern)是一種結構型設計模式,它通過將一個類的接口轉換成客戶期望的另一個接口,使得原本由于接口不兼容而無法一起工作的類能夠一起工作。

適配器模式可以分為三種類型:類適配器模式、對象適配器模式和接口適配器模式。在Java中,我們通常使用對象適配器模式和接口適配器模式。

二、對象適配器模式

對象適配器模式通過組合和委托的方式實現接口適配。它使用一個適配器類來實現目標接口,并持有被適配者的引用,從而在調用目標接口方法時,將請求轉發給被適配者。

示例代碼:

// 目標接口
public interface Target {void request();
}// 被適配者類
public class Adaptee {public void specificRequest() {System.out.println("被適配者的方法");}
}// 適配器類
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}// 客戶端代碼
public class Client {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new Adapter(adaptee);target.request();}
}

在上面的示例中,Target是目標接口,Adaptee是被適配者類,Adapter是適配器類。適配器類實現了目標接口,并持有被適配者的引用。客戶端通過適配器類的實例調用目標接口的方法,實際上是在調用被適配者的方法。

三、接口適配器模式

接口適配器模式(也稱為默認適配器模式)適用于一個接口包含多個方法,而我們只想使用其中一部分方法的情況。它通過一個抽象類實現接口,并為接口中的每個方法提供一個默認實現(通常是空實現)。然后,我們可以繼承這個抽象類,并只覆蓋我們感興趣的方法。

示例代碼:

// 目標接口
public interface Target {void method1();void method2();void method3();
}// 抽象適配器類
public abstract class AbstractAdapter implements Target {@Overridepublic void method1() {// 默認實現(空實現)}@Overridepublic void method2() {// 默認實現(空實現)}@Overridepublic void method3() {// 默認實現(空實現)}
}// 具體適配器類
public class ConcreteAdapter extends AbstractAdapter {@Overridepublic void method1() {System.out.println("覆蓋method1()方法");}
}// 客戶端代碼
public class Client {public static void main(String[] args) {Target target = new ConcreteAdapter();target.method1(); // 輸出:覆蓋method1()方法target.method2(); // 無輸出,使用默認實現target.method3(); // 無輸出,使用默認實現}
}

在上面的示例中,Target是目標接口,包含三個方法。AbstractAdapter是抽象適配器類,實現了目標接口,并為每個方法提供了默認實現(空實現)。ConcreteAdapter是具體適配器類,繼承自抽象適配器類,并覆蓋了method1()方法。客戶端通過具體適配器類的實例調用目標接口的方法,只有method1()方法有實際輸出,其他方法使用默認實現。

四、適配器模式的優勢與應用場景

適配器模式的優勢主要體現在以下幾個方面:

  1. 靈活性:適配器模式使得原本不兼容的接口能夠協同工作,提高了系統的靈活性。
  2. 復用性:通過適配器模式,我們可以復用現有的類,而無需修改其源代碼。
  3. 解耦:適配器模式有助于降低類之間的耦合度,使得代碼更加清晰、易于維護。

適配器模式適用于以下場景:

  1. 當需要使用現有類,但其接口與我們的需求不匹配時。
  2. 當需要統一多個不同接口時,可以使用適配器模式將它們轉換成統一的接口。
  3. 當需要保護現有代碼,避免直接修改時,可以通過適配器模式添加新的功能。

五、總結

本文介紹了Java中的適配器模式,包括對象適配器模式和接口適配器模式。適配器模式通過將一個類的接口轉換成客戶期望的另一個接口,解決了不同接口之間的不兼容問題。它提高了系統的靈活性、復用性和解耦性,使得代碼更加清晰、易于維護。在實際開發中,我們可以根據具體需求選擇合適的適配器模式來解決接口不匹配的問題。

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

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

相關文章

用Python采集動態網頁Requests就不那么好用了,試試Selenium

Requests + BeautifulSoup + 額外的庫: 對于一些簡單的動態內容,你能通過分析網絡請求來找到并直接獲取這些數據。 使用 requests 庫來發送 HTTP 請求,并使用 BeautifulSoup 來解析 HTML。 對于 AJAX 請求,你可能需要使用額外的庫(如 mitmproxy 或 BrowserMob Proxy)來…

武漢AAA企業信用等級認證

AAA企業信用等級認證 1. 什么是AAA企業信用等級認證 AAA企業信用等級認證是由國家知名的第三方機構對企業的信用狀況進行評估和認證的一種方式。它是根據企業在市場經濟中所展示出的信用水平、經營實力、企業形象等方面的表現來確定企業的信用等級,以此為企業提供…

在線進制轉換工具

在線進制轉換 - BTool在線工具軟件,為開發者提供方便。 在線進制轉換器提供了二進制,八進制,十進制,十六進制等相互轉換功能。

Putty中運行matlab文件

首先使用命令 cd /home/ya/CodeTest/Matlab進入路徑:到Matlab文件夾下 然后鍵入matlab,進入matlab環境,如果main.m文件在Matlab文件夾下,直接鍵入main即可運行該文件。細節代碼如下: Unable to use key file "y…

LeetCode 2828.判別首字母縮略詞

給你一個字符串數組 words 和一個字符串 s ,請你判斷 s 是不是 words 的 首字母縮略詞 。 如果可以按順序串聯 words 中每個字符串的第一個字符形成字符串 s ,則認為 s 是 words 的首字母縮略詞。例如,“ab” 可以由 [“apple”, “banana”…

【OpenAI官方課程】第三課:ChatGPT文本總結Summarizing

歡迎來到ChatGPT 開發人員提示工程課程(ChatGPT Prompt Engineering for Developers)!本課程將教您如何通過OpenAI API有效地利用大型語言模型(LLM)來創建強大的應用程序。 本課程由OpenAI 的Isa Fulford和 DeepLearn…

【數據分析——Python Pandas庫——數據清洗——電商數據分析】

引言 現如今,我們在電商平臺上購物已經成為日常生活的一部分。對于電商公司而言,如何準確理解消費者的需求,提供更好的服務是非常重要的。在這里,數據分析成為提供關鍵洞察力的工具。Python語言與其數據處理庫Pandas,…

K8S部署Java項目 pod報錯 logs日志內容:no main manifest attribute, in app.jar

天行健,君子以自強不息;地勢坤,君子以厚德載物。 每個人都有惰性,但不斷學習是好好生活的根本,共勉! 文章均為學習整理筆記,分享記錄為主,如有錯誤請指正,共同學習進步。…

hash,以及數據結構——map容器

1.hash是什么? 定義:hash,一般翻譯做散列、雜湊,或音譯為哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散列算法變換成固定長度的輸出, 該輸出就是散列值。這種轉換是一種壓縮映射&…

Ubuntu/WSL下生產密鑰腳本

說明: 有時候需要為開發人員配發密鑰,為方便寫了個小腳本,在linux下運行,要求 python10, putty-tools。 使用時,在staffList定義用戶列表,運行后程序自動產生對應目錄及密鑰。 安裝: apt inst…

jenkins報錯:Pseudo-terminal will not be allocated because stdin is not a terminal

jenkins的流水線部分代碼如下 sh ssh root192.168.2.234 << remotessh cd /var/lib/jenkins/workspace/txkc /usr/local/maven/apache-maven-3.8.6/bin/mvn clean package -U ls remotessh執行流水線出現報錯&#xff1a;Pseudo-terminal will not be allocated because…

如何把電腦上的png圖片變為jpg?圖片格式在線轉化的方法

由于jpg文件比較小&#xff0c;把png格式轉換后更適合我們的保存和使用&#xff0c;尤其是對于一些平臺上傳來說&#xff0c;很多地方都要求圖片格式為jpg&#xff0c;為了能更順利的上傳&#xff0c;本文就叫大家一個圖片格式轉換的方法&#xff0c;使用壓縮圖網站&#xff0c…

第2.1章 StarRocks表設計——概述

注&#xff1a;本篇文章闡述的是StarRocks-3.2版本的表設計相關內容。 建表是使用StarRocks非常重要的一環&#xff0c;規范化的表設計在某些場景下能使查詢性能有數倍的提升。StarRocks的表設計涉及到的知識點主要包括數據表類型、數據分布&#xff08;分區分桶及排序鍵&#…

golang命令行工具gtcli,實現了完美集成與結構化的gin腳手架,gin-restful-api開箱即用

關于gtools golang非常奈斯&#xff0c;gin作為web框架也非常奈斯&#xff0c;但我們在開發過程中&#xff0c;前期搭建會花費大量的時間&#xff0c;且還不盡人意。 為此我集成了gin-restful-api的模板gin-layout&#xff0c;還有腳手架一鍵生成項目。 集成相關 ginviperz…

【Android】性能優化之內存、網絡、布局、卡頓、安裝包、啟動速度優化

歡迎來到 Android 開發老生常談的性能優化篇&#xff0c;本文將性能優化劃分為內存、網絡、布局、卡頓、安裝包、啟動速度七塊&#xff0c;從這七塊優化出發&#xff0c;闡述優化的 Application 的方式。 目錄 內存優化避免內存泄漏使用內存分析工具優化數據結構和算法數據緩存…

Jmeter基礎(1) Mac下載安裝啟動

目錄 Jmeter下載安裝啟動下載啟動 Jmeter下載安裝啟動 注意??&#xff1a;使用jmeter需要有java環境 下載 官網下載地址&#xff1a;https://jmeter.apache.org/ 會看到這里有兩個版本&#xff0c;那么有什么區別么&#xff1f; Binaries是可執行版&#xff0c;直接下載解…

Python算法題集_圖論(課程表)

Python算法題集_課程表 題207&#xff1a;課程表1. 示例說明2. 題目解析- 題意分解- 優化思路- 測量工具 3. 代碼展開1) 標準求解【循環遞歸全算】2) 改進版一【循環遞歸緩存】3) 改進版二【循環遞歸緩存反向計算】4) 改進版三【迭代剝離計數器檢測】 4. 最優算法5. 相關資源 本…

Spring整合Junit4和Junit5

1、整合的好處 好處1&#xff1a;不需要自己創建IOC容器對象了好處2&#xff1a;任何需要的bean都可以在測試類中直接享受自動裝配 2、操作 整合junit4 ①加入依賴 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><…

代碼隨想錄算法訓練營第二十三天補|669. 修剪二叉搜索樹 ● 108.將有序數組轉換為二叉搜索樹 ● 538.把二叉搜索樹轉換為累加樹

平衡樹、二叉樹、靈活應用中序遍歷&#xff08;值大小有序&#xff09; 669. 修剪二叉搜索樹 給你二叉搜索樹的根節點 root &#xff0c;同時給定最小邊界low 和最大邊界 high。通過修剪二叉搜索樹&#xff0c;使得所有節點的值在[low, high]中。修剪樹 不應該 改變保留在樹中…

Window部署SkyWalking

SkyWalking mysql的驅動依賴 選擇下載版本 v9.4 現在后解壓縮目錄結構 一、修改config目錄文件 application.yml 修改1&#xff1a; selector: ${SW_STORAGE:h2} 修改后&#xff1a; selector: ${SW_STORAGE:mysql} 修改2&#xff1a;使用mysql數據庫 mysql: properti…