溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java適配器模式怎么掌握

發(fā)布時(shí)間:2022-04-06 11:11:52 來源:億速云 閱讀:121 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Java適配器模式怎么掌握的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、什么是適配器模式?

其實(shí)適配器這三個(gè)字大家應(yīng)該很熟悉,我們知道蘋果公司的手機(jī)iPhone已經(jīng)不提供充電插頭了,包裝盒內(nèi)只有一根數(shù)據(jù)線,那么我們無法單獨(dú)使用這根數(shù)據(jù)線進(jìn)行在220V的插板上充電,因此我們需要重新購買一個(gè)適配器來把插板和手機(jī)連接起來,這就是適配器。

其實(shí)在軟件設(shè)計(jì)中也可能出現(xiàn),需要開發(fā)的具有某種業(yè)務(wù)功能的組件在現(xiàn)有的組件庫中已經(jīng)存在,但它們與當(dāng)前系統(tǒng)的接口規(guī)范不兼容,如果重新開發(fā)這些組件成本又很高,這時(shí)用適配器模式能很好地解決這些問題。

2、適配器模式的定義

適配器模式: 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。

適配器模式分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式兩種,前者類之間的耦合度比后者高,且要求程序員了解現(xiàn)有組件庫中的相關(guān)組件的內(nèi)部結(jié)構(gòu),所以應(yīng)用相對較少些。

3、適配器模式的優(yōu)缺點(diǎn)

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

  • 客戶端通過適配器可以透明地調(diào)用目標(biāo)接口

  • 復(fù)用了現(xiàn)存的類,程序員不需要修改原有代碼而重用現(xiàn)有的適配者類

  • 將目標(biāo)類和適配者類解耦,解決了目標(biāo)類和適配者類接口不一致的問題

  • 在很多業(yè)務(wù)場景中符合開閉原則

缺點(diǎn):

  • 適配器編寫過程需要結(jié)合業(yè)務(wù)場景全面考慮,可能會(huì)增加系統(tǒng)的復(fù)雜性

  • 增加代碼閱讀難度,降低代碼可讀性,過多使用適配器會(huì)使系統(tǒng)代碼變得凌亂

4、適配器模式的結(jié)構(gòu)與實(shí)現(xiàn)

(以下結(jié)構(gòu)參考自互聯(lián)網(wǎng))

模式的結(jié)構(gòu):

  • 目標(biāo)(Target)接口: 當(dāng)前系統(tǒng)業(yè)務(wù)所期待的接口,它可以是抽象類或接口

  • 適配者(Adaptee)類: 它是被訪問和適配的現(xiàn)存組件庫中的組件接口

  • 適配器(Adapter)類: 它是一個(gè)轉(zhuǎn)換器,通過繼承或引用適配者的對象,把適配者接口轉(zhuǎn)換成目標(biāo)接口,讓客戶按目標(biāo)接口的格式訪問適配者

類適配器模式的結(jié)構(gòu):

Java適配器模式怎么掌握

對象適配器模式的結(jié)構(gòu):

Java適配器模式怎么掌握

5、適配器模式的代碼實(shí)現(xiàn)

A、使用組合的方式實(shí)現(xiàn)適配器:

我們現(xiàn)在有一臺(tái)筆記本電腦的插頭的三相的,但是我們現(xiàn)在需要使用二相的插頭進(jìn)行充電,所以我們需要給這個(gè)插頭裝上一個(gè)二相的適配器:

Java適配器模式怎么掌握

三相插座接口:

/**
 * 三相插座接口
 */
public interface ThreePlugIf {

    //使用三相電流供電
    public void powerWithThree();

}

國標(biāo)的二相插座:

/**
 * 國標(biāo)的二相插座
 */
public class GBTowPlug {
    public void powerWithTwo(){
        System.out.println("使用二相電流供電");
    }
}

筆記本:

/**
 * 筆記本
 */
public class NoteBook {

    private ThreePlugIf plug;

    public NoteBook(ThreePlugIf plug){
        this.plug = plug;
    }

    //使用插座充電
    public void charge(){
        plug.powerWithThree();
    }
}

三相轉(zhuǎn)二相的插座適配器:

/**
 * 三相轉(zhuǎn)二相的插座適配器
 */

public class TwoPlugAdapter implements ThreePlugIf {


    private GBTowPlug plug;

    public TwoPlugAdapter(GBTowPlug plug) {
        this.plug = plug;
    }

    @Override
    public void powerWithThree() {
        System.out.println("通過轉(zhuǎn)換");
        plug.powerWithTwo();
    }
}

測試類:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();
	}
}

輸出結(jié)果:

通過轉(zhuǎn)換
使用二相電流供電

采用組合方式的適配器稱為對象適配器

特點(diǎn):

把“被適配者”作為一個(gè)對象組合到適配器類中,以修改目標(biāo)接口包裝給適配者

B、使用繼承的方式實(shí)現(xiàn)適配器:

Java適配器模式怎么掌握

繼承適配器:

/**
 * 采用繼承方式的插座適配器
 */
public class TwoPlugAdapterExtends extends GBTowPlug implements ThreePlugIf{
    @Override
    public void powerWithThree() {
        System.out.println("借助繼承適配器");
        this.powerWithTwo();
    }
}

測試類:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();

    //使用繼承方法
    three = new TwoPlugAdapterExtends();
    nb = new NoteBook(three);
    nb.charge();
}
}

輸出:

通過轉(zhuǎn)換
使用二相電流供電

借助繼承適配器
使用二相電流供電

采用繼承方式的稱為類適配器

特點(diǎn):

通過多重繼承不兼容接口,實(shí)現(xiàn)對目標(biāo)接口的匹配,單一的為某個(gè)類而實(shí)現(xiàn)適配

6、適配器模式的應(yīng)用場景

  • 之前開發(fā)的系統(tǒng)存在滿足新系統(tǒng)功能需求的類,但其接口同新系統(tǒng)的接口不一致

  • 使用第三方提供的組件,但組件接口定義和自己要求的接口定義不同

以上就是“Java適配器模式怎么掌握”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI