java設計模式5——適配器模式

来源:https://www.cnblogs.com/xgp123/archive/2020/02/15/12306674.html
-Advertisement-
Play Games

1、結構型設計模式 2、適配器模式 3、類適配器 4、對象適配器 ...


java設計模式5——適配器模式

1、結構型模式介紹

1.1、作用

從程式的結構上實現松耦合,從而可以擴大整體的類結構,用來解決更大的問題。

分類:

  • 適配器模式
  • 代理模式
  • 橋接模式
  • 裝飾模式
  • 組合模式
  • 外觀模式
  • 享元模式

    2、適配器模式介紹

    適配器模式(Adapter Pattern)是作為兩個不相容的介面之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。

這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的介面功能。舉個真實的例子,讀卡器是作為記憶體卡和筆記本之間的適配器。您將記憶體卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取記憶體卡。

本節舉例:(網線和筆記本電腦)

3、第一種建模方式:(使用繼承,網線和轉換器綁在一起)又稱為類適配器

3.1、定義要適配的類(網線)

package com.xgp.company.結構性模式.第一種_適配器模式;

/**
 * 要被適配的類(網線)
 */
public class Adaptee {
    public void request() {
        System.out.println("連接網線上網!");
    }
}

3.2、定義客戶端類(電腦)

package com.xgp.company.結構性模式.第一種_適配器模式;

/**
 * 客戶端類:想上網,插不上網線
 */
public class Computer {

    //我們的電腦需要連接上轉接器才能上網
    public void net(NetToUsb adapter) {
        //上網的具體實現,找一個轉接頭
        adapter.handleRequest();
    }

    public static void main(String[] args) {
        //電腦,適配器,網線
        Computer computer = new Computer();
        Adapter adapter = new Adapter();
//        Adaptee adaptee = new Adaptee();

        computer.net(adapter);

    }
}

此時,該電腦無法插入網線進行上網,因此需要適配

3.3、定義適配器的抽象實現

package com.xgp.company.結構性模式.第一種_適配器模式;

/**
 * 介面轉換器的抽像實現
 */
public interface NetToUsb {
    //作用:處理請求(網 => usb)
    public void handleRequest();

}

3.4、定義具體的網線轉換器

package com.xgp.company.結構性模式.第一種_適配器模式;
/**
 * 1、繼承方式(類適配器)
 * 2、組合(對象適配器:常用)
 */

/**
 * 適配器:需要連接usb和網線
 */
public class Adapter extends Adaptee implements NetToUsb {

    @Override
    public void handleRequest() {
        //可以上網了
        super.request();
    }
}

此時網線通過適配器插入了電腦,實現了上網的功能了

連接網線上網!

4、第二種建模方式:(使用組合,網線和轉換器分離)又稱為對象適配器

網線類和適配器的抽象類不變

4.1、適配器類的改進

package com.xgp.company.結構性模式.第二種_適配器模式;
/**
 * 1、繼承方式(類適配器)
 * 2、組合(對象適配器:常用)
 */

/**
 * 適配器:需要連接usb和網線
 */
public class Adapter implements NetToUsb {

    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void handleRequest() {
        //可以上網了
        adaptee.request();
    }
}

4.2、電腦類的改進

package com.xgp.company.結構性模式.第二種_適配器模式;

/**
 * 客戶端類:想上網,插不上網線
 */
public class Computer {

    //我們的電腦需要連接上轉接器才能上網
    public void net(NetToUsb adapter) {
        //上網的具體實現,找一個轉接頭
        adapter.handleRequest();
    }

    public static void main(String[] args) {
        //電腦,適配器,網線
        Computer computer = new Computer();
        Adaptee adaptee = new Adaptee();

        Adapter adapter = new Adapter(adaptee);


        computer.net(adapter);

    }
}

4.3、測試,電腦成功連上網線進行上網了

連接網線上網!

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 瀏覽器訪問網站過程 1. 用戶在瀏覽器地址欄中輸入網址 2. 瀏覽器解析網址構建HTTP請求 HTTP請求報文包括:請求行、請求頭和請求體 3. 瀏覽器發起DNS解析請求,將功能變數名稱轉化為IP地址 網址映射到伺服器IP地址,指定了訪問的伺服器 4. 瀏覽器發送請求報文給到伺服器 5. 伺服器接收並解析報 ...
  • 佈局是什麼?根據功能劃分小塊,再根據設計稿還原,書寫靜態頁面,然後再在塊裡面填充內容,完善功能,js施加交互效果。div作為一個容器,獨占一行,代碼書寫習慣從上至下屬於標準流,而浮動float的css樣式則打破div(標準流)獨占一行的傳統!具體代碼展示如下: ...
  • 盒模型規定了元素框處理元素內容width與height值、內邊距padding、邊框border 和 外邊距margin 的數值大小。邊框內的空白是內邊距padding,邊框外的空白是外邊距margin,如下所示,這個盒模型元素框的寬度值=內容區域的寬度+2(內邊距+外邊距+邊框),也就是該示例中的... ...
  • 能找到一份前端開發工作,首先你起碼得是一個合格的初級前端工程師。那麼,什麼是初級前端工程師?初級前端工程師都會做些什麼?這個問題需要分為以下幾個方面來說: ...
  • 前言 現在的前端門檻越來越高,不再是只會寫寫頁面那麼簡單。模塊化、自動化、跨端開發等逐漸成為要求,但是這些都需要建立在我們牢固的基礎之上。不管框架和模式怎麼變,把基礎原理打牢才能快速適應市場的變化。下麵介紹一些常用的源碼實現: call實現 bind實現 new實現 instanceof實現 Obj ...
  • 前言 昨天一番發了一篇批量下載手機壁紙的文章,分享了抓取到的美圖給小伙伴,然後一番就美美的去碎覺了。 早上起來看到有小伙伴在日更群里說有沒有狗哥的?憨憨的一番以為就是狗的圖片,於是就發了幾張昨天抓取的狗的圖片。 在群友的幫助下,一番才知道是愛情公寓里的一個演員。 小伙伴有需求,一番本著力所能及的幫助 ...
  • 時間輪演算法 時間輪是一種高效、低延遲的調度數據結構。其在Linux內核中廣泛使用,是Linux內核定時器的實現方法和基礎之一。按使用場景,大致可以分為兩種時間輪:原始時間輪和分層時間輪。分層時間輪是原始時間輪的升級版本,來應對時間“槽”數量比較大的情況,對記憶體和精度都有很高要求的情況。延遲任務的場景 ...
  • 前言 預設的 Identity 實體類型在大多數時候已經基本夠用,很多時候也只是稍微在 IdentityUser 類中增加一些自定義數據欄位,比如頭像。這次,我要向園友隆重介紹我魔改之後的 Identity 實體類,能支持一些特別風騷的操作。當然也完全相容內置的 UserManager、RoleMa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...