国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 設(shè)計(jì)模式——適配器模式

這篇具有很好參考價(jià)值的文章主要介紹了Java 設(shè)計(jì)模式——適配器模式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.概述

(1)如果去歐洲國家去旅游的話,他們的插座如下圖最左邊,是歐洲標(biāo)準(zhǔn)。而我們使用的插頭如下圖最右邊的。因此我們的筆記本電腦,手機(jī)在當(dāng)?shù)夭荒苤苯映潆姟K跃托枰粋€(gè)插座轉(zhuǎn)換器,轉(zhuǎn)換器第1面插入當(dāng)?shù)氐牟遄?面供我們充電,這樣使得我們的插頭在當(dāng)?shù)啬苁褂?。生活中這樣的例子很多,手機(jī)充電器(將 220V 轉(zhuǎn)換為 5V 的電壓),讀卡器等,其實(shí)就是使用到了適配器模式。

Java 設(shè)計(jì)模式——適配器模式,Java 設(shè)計(jì)模式,Java,適配器模式,設(shè)計(jì)模式

(2)適配器模式 (Adapter Pattern) 是一種結(jié)構(gòu)型設(shè)計(jì)模式,它通過將一個(gè)類的接口轉(zhuǎn)換成客戶端所期望的另一個(gè)接口,使得原本由于接口不兼容而無法一起工作的類能夠協(xié)同工作。適配器模式分為類適配器模式對象適配器模式,前者類之間的耦合度比后者高,且要求程序員了解現(xiàn)有組件庫中的相關(guān)組件的內(nèi)部結(jié)構(gòu),故應(yīng)用相對較少。

2.結(jié)構(gòu)

適配器模式 (Adapter) 包含以下主要角色:

  • 目標(biāo) (Target) 接口:當(dāng)前系統(tǒng)業(yè)務(wù)所期待的接口,它可以是抽象類或接口。
  • 被適配 (Adaptee) 類:它是被訪問和適配的現(xiàn)存組件庫中的組件接口。
  • 適配器 (Adapter) 類:它是一個(gè)轉(zhuǎn)換器,通過繼承或引用適配者的對象,把適配者接口轉(zhuǎn)換成目標(biāo)接口,讓客戶按目標(biāo)接口的格式訪問適配者。

3.類適配器模式

實(shí)現(xiàn)方式:定義一個(gè)適配器類來實(shí)現(xiàn)當(dāng)前系統(tǒng)的業(yè)務(wù)接口,同時(shí)又繼承現(xiàn)有組件庫中已經(jīng)存在的組件。
【讀卡器】:現(xiàn)有一臺(tái)電腦只能讀取 SD 卡,而要讀取 TF 卡中的內(nèi)容的話就需要使用到適配器模式。創(chuàng)建一個(gè)讀卡器,將 TF 卡中的內(nèi)容讀取出來。類圖如下:

Java 設(shè)計(jì)模式——適配器模式,Java 設(shè)計(jì)模式,Java,適配器模式,設(shè)計(jì)模式

具體代碼如下:

3.1.目標(biāo)接口

SDCard.java

//目標(biāo)接口
public interface SDCard {
    //從 SD 卡中讀取數(shù)據(jù)
    String readSD();
    
    //往 SD 卡中寫數(shù)據(jù)
    void writeSD(String msg);
}

SDCardImpl.java

public class SDCardImpl implements SDCard{
    @Override
    public String readSD() {
        String msg = "SDCard read msg : hello word SD";
        return msg;
    }
    
    @Override
    public void writeSD(String msg) {
        System.out.println("SDCard write msg :" + msg);
    }
}

3.2.被適配類

TFCard.java

//被適配類的接口
public interface TFCard {
    //從TF卡中讀數(shù)據(jù)
    String readTF();
    
    //從THF卡中寫數(shù)據(jù)
    void writeTF(String msg);
}

TFCardImpl.java

//適配者類
public class TFCardImpl implements TFCard{
    @Override
    public String readTF() {
        String msg = "TFCard read msg :hello word TFCard";
        return msg;
    }
    
    @Override
    public void writeTF(String msg) {
        System.out.println("TFCard write msg :"+msg);
    }
}

3.3.適配器類

ADAdapterTF.java

//適配器類
public class ADAdapterTF extends TFCardImpl implements SDCard{
    
    @Override
    public String readSD() {
        System.out.println("adapter read tf card");
        return readTF();
    }
    
    @Override
    public void writeSD(String msg) {
        System.out.println("adapter write tf card");
        writeTF(msg);
    }
}

Computer.java

//計(jì)算機(jī)類
public class Computer {
    //從 SD 卡中讀取數(shù)據(jù)
    public String readSD(SDCard sdCard) {
        if (sdCard == null) {
            throw new NullPointerException("sd card cannot be null");
        }
        return sdCard.readSD();
    }
}

3.4.測試

Client.java

public class Client {
    public static void main(String[] args) {
        //創(chuàng)建計(jì)算機(jī)對象
        Computer computer = new Computer();
        String msg = computer.readSD(new SDCardImpl());
        System.out.println(msg);
    
        System.out.println("=============");
        
        //使用該電腦讀取 TF 卡中的數(shù)據(jù)
        String msg1 = computer.readSD(new ADAdapterTF());
        System.out.println(msg1);
    }
}

注:類適配器模式違背了合成復(fù)用原則。類適配器是客戶類有一個(gè)接口規(guī)范的情況下可用,反之不可用。

4.對象適配器模式

實(shí)現(xiàn)方式:對象適配器模式可釆用將現(xiàn)有組件庫中已經(jīng)實(shí)現(xiàn)的組件引入適配器類中,該類同時(shí)實(shí)現(xiàn)當(dāng)前系統(tǒng)的業(yè)務(wù)接口。還是以上面的讀卡器為例進(jìn)行改寫,類圖如下:

Java 設(shè)計(jì)模式——適配器模式,Java 設(shè)計(jì)模式,Java,適配器模式,設(shè)計(jì)模式
對于類適配器模式的代碼,只需要修改適配器類 (SDAdapterTF) 和 測試類 (Client) 即可,修改后的代碼如下:

  • SDAdapterTF.java
//適配器類
public class SDAdapterTF implements SDCard {
    
    //聲明適配者類
    private TFCard tfCard;
    
    public SDAdapterTF(TFCard tfCard){
        this.tfCard = tfCard;
    }
    
    @Override
    public String readSD() {
        System.out.println("adapter read tf card");
        return tfCard.readTF();
    }
    
    @Override
    public void writeSD(String msg) {
        System.out.println("adapter write tf card");
        tfCard.writeTF(msg);
    }
}
  • Client.java
public class Client {
    public static void main(String[] args) {
        //創(chuàng)建計(jì)算機(jī)對象
        Computer computer = new Computer();
        String msg = computer.readSD(new SDCardImpl());
        System.out.println(msg);
    
        System.out.println("===============");
        //使用該電腦讀取 TF 卡中的數(shù)據(jù)
        //創(chuàng)建適配器類對象
        SDAdapterTF sdAdapterTF = new SDAdapterTF(new TFCardImpl());
        String msg1 = computer.readSD(sdAdapterTF);
        System.out.println(msg1);
    }
}

注意:還有一個(gè)適配器模式是接口適配器模式,當(dāng)不希望實(shí)現(xiàn)一個(gè)接口中所有的方法時(shí),可以創(chuàng)建一個(gè)抽象類Adapter,實(shí)現(xiàn)所有方法。而此時(shí)我們只需要繼承該抽象類即可。

5.優(yōu)缺點(diǎn)

(1)適配器模式有以下優(yōu)點(diǎn)和缺點(diǎn):

  • 優(yōu)點(diǎn)

    • 轉(zhuǎn)換不兼容的接口:適配器模式能夠?qū)⒁粋€(gè)類的接口轉(zhuǎn)換成另一個(gè)類的接口,使得原本由于接口不兼容而無法一起工作的類能夠協(xié)同工作。
    • 透明性:適配器模式可以讓客戶端代碼與原有接口解耦,無需修改原有代碼,只需通過適配器進(jìn)行適配即可。
    • 復(fù)用已有類:適配器模式可以重用現(xiàn)有的類,通過適配器轉(zhuǎn)換后,這些類可以與其他不兼容的接口進(jìn)行工作。
    • 靈活性:適配器模式可以在系統(tǒng)中引入新的類,并將其與現(xiàn)有的類一起工作,而無需修改現(xiàn)有的代碼。這使得系統(tǒng)更加靈活,能夠方便地進(jìn)行擴(kuò)展和維護(hù)。
  • 缺點(diǎn)

    • 類型數(shù)量增加:引入適配器類可能會(huì)增加代碼中的類的數(shù)量,使得代碼的結(jié)構(gòu)復(fù)雜化。
    • 過多的適配器:如果系統(tǒng)中存在大量的不兼容接口,就會(huì)導(dǎo)致需要大量的適配器類,增加了系統(tǒng)的復(fù)雜性。
    • 性能損失:適配器模式可能會(huì)導(dǎo)致性能損失,因?yàn)樵谶M(jìn)行接口轉(zhuǎn)換時(shí)需要額外的邏輯處理。

(2)需要根據(jù)具體的使用場景和需求綜合考慮適配器模式的使用。適配器模式在解決接口不兼容的問題上具有一定的優(yōu)勢,但也需要注意適配器模式的適用范圍,避免濫用和過度設(shè)計(jì)。

6.應(yīng)用場景

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

  • 系統(tǒng)需要使用已有的類,但其接口與系統(tǒng)要求的接口不匹配。適配器模式可以將已有類的接口適配成系統(tǒng)所需的接口。
  • 需要復(fù)用現(xiàn)有類,在現(xiàn)有類的基礎(chǔ)上進(jìn)行功能擴(kuò)展,但原有類的接口無法直接滿足需求。適配器模式可以通過適配器來擴(kuò)展已有類的功能,使其適配新的接口。
  • 在系統(tǒng)中引入新的類,但該類的接口與系統(tǒng)的其他組件不兼容。適配器模式可以將新類的接口轉(zhuǎn)換成系統(tǒng)要求的接口,使其與其他組件協(xié)同工作。
  • 不同團(tuán)隊(duì)開發(fā)的兩個(gè)系統(tǒng)需要進(jìn)行集成,但其接口不兼容。適配器模式可以將兩個(gè)系統(tǒng)的接口進(jìn)行適配,使其能夠協(xié)同工作。
  • 需要設(shè)計(jì)一個(gè)可復(fù)用的類,它需要與其他不兼容的接口一起工作。適配器模式可以將該類的接口適配成其他不兼容接口,使其能夠與其他組件協(xié)同工作。

(2)總之,適配器模式適用于在不兼容接口之間進(jìn)行轉(zhuǎn)換的場景。它可以使原本不兼容的類能夠協(xié)同工作,提高代碼的復(fù)用性和靈活性。在軟件開發(fā)過程中,適配器模式經(jīng)常被用于系統(tǒng)集成、API 設(shè)計(jì)、舊系統(tǒng)的功能擴(kuò)展等方面。

7.JDK 源碼解析——InputStreamReader

(1)Reader(字符流)、InputStream(字節(jié)流)的適配使用的是 InputStreamReader。 InputStreamReader 繼承自 java.io 包中的 Reader,對它中的抽象的未實(shí)現(xiàn)的方法給出實(shí)現(xiàn)。InputStreamReader 類中的部分源代碼如下:

package java.io;

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import sun.nio.cs.StreamDecoder;

public class InputStreamReader extends Reader {

	// StreamDecoder 繼承了 Read
    private final StreamDecoder sd;

	......
	
    public int read() throws IOException {
        return sd.read();
    }

    public int read(char cbuf[], int offset, int length) throws IOException {
        return sd.read(cbuf, offset, length);
    }

    ......
}

(2)如上代碼中的 sd(StreamDecoder 類對象),在 Sun 的 JDK 實(shí)現(xiàn)中,實(shí)際的方法實(shí)現(xiàn)是對 sun.nio.cs.StreamDecoder 類的同名方法的調(diào)用封裝。類結(jié)構(gòu)圖如下:
Java 設(shè)計(jì)模式——適配器模式,Java 設(shè)計(jì)模式,Java,適配器模式,設(shè)計(jì)模式
(3)從上圖可以看出:

  • InputStreamReader 是對同樣實(shí)現(xiàn)了 Reader 的 StreamDecoder 的封裝。
  • StreamDecoder 不是 Java SE API 中的內(nèi)容,是 Sun JDK 給出的自身實(shí)現(xiàn)。但我們知道他們對構(gòu)造方法中的字節(jié)流類 (InputStream) 進(jìn)行封裝,并通過該類進(jìn)行了字節(jié)流和字符流之間的解碼轉(zhuǎn)換。

(4)結(jié)論:從表層來看,InputStreamReader 做了 InputStream 字節(jié)流類到 Reader 字符流之間的轉(zhuǎn)換。而從如上 Sun JDK 中的實(shí)現(xiàn)類關(guān)系結(jié)構(gòu)中可以看出,是 StreamDecoder 的設(shè)計(jì)實(shí)現(xiàn)在實(shí)際上采用了適配器模式。文章來源地址http://www.zghlxwxcb.cn/news/detail-570161.html

到了這里,關(guān)于Java 設(shè)計(jì)模式——適配器模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 重讀Java設(shè)計(jì)模式: 適配器模式解析

    重讀Java設(shè)計(jì)模式: 適配器模式解析

    在軟件開發(fā)中,經(jīng)常會(huì)遇到不同接口之間的兼容性問題。當(dāng)需要使用一個(gè)已有的類,但其接口與我們所需的不兼容時(shí),我們可以通過適配器模式來解決這一問題。適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許接口不兼容的類之間進(jìn)行合作。本文將深入探討適配器模式的概念、應(yīng)

    2024年04月09日
    瀏覽(21)
  • Java與設(shè)計(jì)模式(7):適配器模式

    適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許將一個(gè)類的接口轉(zhuǎn)換為客戶端所期望的另一個(gè)接口。適配器模式使得原本由于接口不兼容而無法一起工作的類能夠協(xié)同工作。 適配器模式通過引入一個(gè)適配器類來解決接口不兼容的問題。適配器類實(shí)現(xiàn)了客戶端所期望的目標(biāo)接口,并

    2024年02月11日
    瀏覽(23)
  • Java設(shè)計(jì)模式-結(jié)構(gòu)型-適配器模式

    Java設(shè)計(jì)模式-結(jié)構(gòu)型-適配器模式

    ? 與電源適配器相似,在適配器模式中引入了一個(gè)被稱為適配器(Adapter)的包裝類,而它所包裝的對象稱為適配者(Adaptee),即被適配的類。適配器的實(shí)現(xiàn)就是把客戶類的請求轉(zhuǎn)化為對適配者的相應(yīng)接口的調(diào)用。也就是說:當(dāng)客戶類調(diào)用適配器的方法時(shí),在適配器類的內(nèi)部將調(diào)用

    2024年02月20日
    瀏覽(30)
  • 【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之適配器模式

    【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之適配器模式

    適配器模式(Adapter Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式, 用于將一個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口 。這種模式使得原本由于接口不兼容而不能一起工作的類可以一起工作。在本文中,我們將介紹 Java 中適配器模式的定義、結(jié)構(gòu)、使用場景以及如何在實(shí)際開發(fā)中應(yīng)用。

    2024年01月19日
    瀏覽(25)
  • 【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——適配器模式Adapter(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——適配器模式Adapter(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    不同國家的插座不同,出國旅游充電器不能直接使用,可以通過使用 多功能轉(zhuǎn)換插頭 來輔助使用 適配器模式將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個(gè)類可以協(xié)同工作。其別名為包裝器(Wrapper) 適配器模

    2024年02月16日
    瀏覽(22)
  • 設(shè)計(jì)模式——適配器模式

    設(shè)計(jì)模式——適配器模式

    說起適配器其實(shí)在我們的生活中是非常常見的,比如:學(xué)校的宿舍的電壓都比較低,而有的學(xué)生想使用大功率電器,宿舍的就會(huì)跳閘,然而如果你使用一個(gè)適配器(變壓器)就可以使用了(溫馨提示宿舍使用大功率電器不太安全,容易引起火災(zāi),希望大家謹(jǐn)慎使用)。 又比如

    2024年02月12日
    瀏覽(35)
  • 設(shè)計(jì)模式-適配器模式

    設(shè)計(jì)模式-適配器模式

    在我們生活中,插座輸出的電源都是220V的,而我們手機(jī)充電需要的電壓基本都是5V的。我們不能直接用220V的電壓來給手機(jī)充電,也不能說專門有線路來提供5V的電壓。所以就有了充電器,充電器可以將220V的電壓轉(zhuǎn)為5V的電壓,這樣我們就方便太多了。 上面所說的充電器其實(shí)就

    2024年02月08日
    瀏覽(34)
  • 【設(shè)計(jì)模式】適配器模式

    【設(shè)計(jì)模式】適配器模式

    適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能。 這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)加入獨(dú)立的或不兼容的接口功能。舉個(gè)真實(shí)的例子,讀卡器是作為內(nèi)存卡和筆記本之間的適配器。

    2024年02月12日
    瀏覽(32)
  • 設(shè)計(jì)模式--適配器模式

    設(shè)計(jì)模式--適配器模式

    目錄 基本介紹 工作原理 類適配模式 介紹 應(yīng)用實(shí)例介紹 類適配器模式注意事項(xiàng)和細(xì)節(jié) 對象適配模式 介紹 對象適配器模式注意事項(xiàng)和細(xì)節(jié) 接口適配器模式 介紹 適配器模式的注意事項(xiàng)和細(xì)節(jié) ?(1) 適配器模式(Adapter Pattern) 將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口表示

    2023年04月26日
    瀏覽(19)
  • 【Java面試題】設(shè)計(jì)模式之七種結(jié)構(gòu)性模式——代理模式、適配器模式、橋接模式、裝飾模式、外觀模式、享元模式、組合模式

    目錄 一、代理模式 二、適配器模式 三、橋接模式 四、裝飾模式 五、外觀模式 六、享元模式 七、組合模式 概念: 代理模式是為其他對象提供一種以代理控制對這個(gè)對象的訪問。在某些情況下,一個(gè)對象不適合或者不能直接引用另一個(gè)對象,而代理對象可以在客戶端和目標(biāo)對

    2023年04月09日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包