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

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

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

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

引入實(shí)例

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

又比如說(shuō),有的插座都是三孔的,而我們用的大部分電器是兩孔的,這時(shí)我們可以使用一個(gè)適配器,適配器本身是三孔的,它可以直接插到三孔的插頭上,適配器本身可以提供一個(gè)兩孔的插座,然后我們就可以插到適配器上了,這樣我們?cè)局荒懿宓絻煽咨系牟孱^就能用三孔的插座了。

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

適配器模式的相關(guān)概念

適配器模式的正式定義

適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能。

適配器模式分為
  • 類(lèi)適配器模式
  • 對(duì)象適配器模式
適配器模式的結(jié)構(gòu)

適配器模式里面總共擁有三個(gè)角色,它們分別是:

  • 目標(biāo)(Target)接口:當(dāng)前系統(tǒng)業(yè)務(wù)所期待的接口,它可以是抽象類(lèi)或接口。
  • 適配者(Adaptee)類(lèi):它是被訪問(wèn)和適配的現(xiàn)存組件庫(kù)中的組件接口。
  • 適配器(Adapter)類(lèi):它是一個(gè)轉(zhuǎn)換器,通過(guò)繼承(類(lèi)適配器模式)或引用適配者的對(duì)象(對(duì)象適配器模式),把適配者接口轉(zhuǎn)換成目標(biāo)接口(也就是使用轉(zhuǎn)換器將三頭的插座轉(zhuǎn)換成適合我們使用的兩頭插座),讓客戶(hù)按目標(biāo)接口的格式訪問(wèn)適配者。

注意事項(xiàng):適配器不是在詳細(xì)設(shè)計(jì)時(shí)添加的,而是解決正在服役的項(xiàng)目的問(wèn)題。

類(lèi)適配器

類(lèi)適配器的原理就是通過(guò)繼承來(lái)實(shí)現(xiàn)適配器功能。

讓Adapter實(shí)現(xiàn)Target接口,并且繼承Adaptee,這樣Adapter就具備Target和Adaptee的特性,就可以將兩者進(jìn)行轉(zhuǎn)化。

舉例:以不同設(shè)備使用不同交流電為例,通過(guò)電源適配器進(jìn)行轉(zhuǎn)換說(shuō)明。

創(chuàng)建目標(biāo)角色(Target)
public interface Target {
    int out();
}
創(chuàng)建源角色(Adaptee)
public class Adaptee{
    public int input() {
        System.out.println("輸入交流電: 220V");
        return 220;
    }
}
創(chuàng)建適配器(Adapter)
public class Adapter extends Adaptee implements Target {
    @Override
    public int out() {
        int input220V = super.input();
        int output = input220V / 2;
        System.out.println("輸出交流電: " + output + "V");
        return output;
    }
}
客戶(hù)端調(diào)用
public static void main(String[] args) {
    Target adapter = new Adapter();
    int result = adapter.out();
    System.out.println(result);
}

輸入交流電: 220V
輸出交流電: 110V
110

對(duì)象適配器

對(duì)象適配器的原理就是通過(guò)組合來(lái)實(shí)現(xiàn)適配器功能。

讓Adapter實(shí)現(xiàn)Target接口,然后內(nèi)部持有Adaptee實(shí)例,然后再Target接口規(guī)定的方法內(nèi)轉(zhuǎn)換Adaptee。

創(chuàng)建目標(biāo)角色(Target)
public interface Target {
    int out();
}
創(chuàng)建源角色(Adaptee)
public class Adaptee{
    public int input() {
        System.out.println("輸入交流電: 220V");
        return 220;
    }
}
創(chuàng)建適配器(Adapter)
public class Adapter implements Target {
    private Adaptee adaptee;
    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }
    @Override
    public int out() {
        int output = adaptee.input() / 2;
        System.out.println("輸出交流電: " + output + "V");
        return output;
    }
}
客戶(hù)端調(diào)用
    public static void main(String[] args) {
        Target adapter = new Adapter(new Adaptee());
        int result = adapter.out();
        System.out.println(result);
    }

輸入交流電: 220V
輸出交流電: 110V
110

接口適配器

接口適配器的使用場(chǎng)景是解決接口方法過(guò)多,如果直接實(shí)現(xiàn)接口,那么類(lèi)會(huì)多出許多空實(shí)現(xiàn)的方法,類(lèi)顯得很臃腫。此時(shí),使用接口適配器就能讓我們只實(shí)現(xiàn)我們需要的接口方法,目標(biāo)更清晰。

接口適配器的主要原理就是原理利用抽象類(lèi)實(shí)現(xiàn)接口,并且空實(shí)現(xiàn)接口眾多方法。

創(chuàng)建目標(biāo)角色(Target)

public interface Target {
    int out1();
    int out2();
    int out3();
    int out4();
}

創(chuàng)建源角色(Adaptee)

public class Adaptee{
    public int input() {
        System.out.println("輸入交流電: 220V");
        return 220;
    }
}

創(chuàng)建適配器(Adapter)

public class Adapter implements Target {
    protected Adaptee adaptee;
    public Adapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }
    @Override
    public int out1() {
        int input220V = adaptee.input();
        int output = input220V / 1;
        System.out.println("輸出交流電: " + output + "V");
        return output;
    }
    @Override
    public int out2() {
        int input220V = adaptee.input();
        int output = input220V / 2;
        System.out.println("輸出交流電: " + output + "V");
        return output;
    }
    @Override
    public int out3() {
        return 0;
    }
    @Override
    public int out4() {
        return 0;
    }
}

客戶(hù)端調(diào)用

    public static void main(String[] args) {
        Target adapter = new Adapter(new Adaptee());
        adapter.out1();
        System.out.println("---------------------");
        adapter.out2();
        System.out.println("---------------------");
        Target adapter2 = new Adapter(new Adaptee()) {
            @Override
            public int out3() {
                int input220V = adaptee.input();
                int output = input220V / 3;
                System.out.println("輸出交流電: " + output + "V");
                return output;
            }
        };
        adapter2.out3();
        System.out.println("---------------------");
        Target adapter3 = new Adapter(new Adaptee()) {
            @Override
            public int out4() {
                int input220V = adaptee.input();
                int output = input220V / 4;
                System.out.println("輸出交流電: " + output + "V");
                return output;
            }
        };
        adapter3.out4();
    }

輸入交流電: 220V
輸出交流電: 220V
---------------------
輸入交流電: 220V
輸出交流電: 110V
---------------------
輸入交流電: 220V
輸出交流電: 73V
---------------------
輸入交流電: 220V
輸出交流電: 55V

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

適配器模式優(yōu)點(diǎn):

  • 可以讓任何兩個(gè)沒(méi)有關(guān)聯(lián)的類(lèi)一起運(yùn)行。
  • 提高了類(lèi)的復(fù)用。
  • 增加了類(lèi)的透明度。
  • 靈活性好。

適配器模式缺點(diǎn):

  • 過(guò)多地使用適配器,會(huì)讓系統(tǒng)非常零亂,不易整體進(jìn)行把握。比如,明明看到調(diào)用的是 A 接口,其實(shí)內(nèi)部被適配成了 B 接口的實(shí)現(xiàn),一個(gè)系統(tǒng)如果太多出現(xiàn)這種情況,無(wú)異于一場(chǎng)災(zāi)難。因此如果不是很有必要,可以不使用適配器,而是直接對(duì)系統(tǒng)進(jìn)行重構(gòu)。
  • 由于 JAVA 至多繼承一個(gè)類(lèi),所以至多只能適配一個(gè)適配者類(lèi),而且目標(biāo)類(lèi)必須是抽象類(lèi)。
優(yōu)點(diǎn) :
  • 類(lèi)適配器模式優(yōu)點(diǎn):由于適配器類(lèi)是適配者類(lèi)的子類(lèi),因此可以在適配器類(lèi)中置換一些適配者的方法,使得適配器的靈活性更強(qiáng)。
  • 對(duì)象適配器模式優(yōu)點(diǎn):一個(gè)對(duì)象適配器可以把多個(gè)不同的適配者適配到同一個(gè)目標(biāo),也就是說(shuō),同一個(gè)適配器可以把適配者類(lèi)和它的子類(lèi)都適配到目標(biāo)接口。

缺點(diǎn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-656847.html

  • 類(lèi)適配器模式缺點(diǎn):對(duì)于Java、C#等不支持多重繼承的語(yǔ)言,一次最多只能適配一個(gè)適配者類(lèi),而且目標(biāo)抽象類(lèi)只能為抽象類(lèi),不能為具體類(lèi),其使用有一定的局限性,不能將一個(gè)適配者類(lèi)和它的子類(lèi)都適配到目標(biāo)接口。
  • 對(duì)象適配器模式缺點(diǎn):與類(lèi)適配器模式相比,要想置換適配者類(lèi)的方法就不容易。如果一定要置換掉適配者類(lèi)的一個(gè)或多個(gè)方法,就只好先做一個(gè)適配者類(lèi)的子類(lèi),將適配者類(lèi)的方法置換掉,然后再把適配者類(lèi)的子類(lèi)當(dāng)做真正的適配者進(jìn)行適配,實(shí)現(xiàn)過(guò)程較為復(fù)雜。
類(lèi)適配器和對(duì)象適配器的區(qū)別:
  • 前者類(lèi)之間的耦合度比后者高(這是因?yàn)轭?lèi)適配器模式使用的是繼承的方式,而對(duì)象適配器模式使用的是聚合或者組合的方式)。
  • 類(lèi)適配器模式要求程序員了解現(xiàn)有組件庫(kù)中的相關(guān)組件的內(nèi)部結(jié)構(gòu),所以應(yīng)用相對(duì)較少些,用的更多的還是對(duì)象適配器模式。

應(yīng)用場(chǎng)景

  1. 當(dāng)一個(gè)系統(tǒng)需要使用另一個(gè)系統(tǒng)的接口時(shí),但是兩個(gè)系統(tǒng)的接口不兼容,可以使用適配器模式進(jìn)行接口轉(zhuǎn)換。
  2. 在數(shù)據(jù)處理方面,適配器模式可以用于將不同格式的數(shù)據(jù)適配到一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)格式上。
  3. 當(dāng)我們需要復(fù)用一些已有的類(lèi)的時(shí)候,這些類(lèi)的接口與我們需要的接口不兼容,可以使用適配器將這些類(lèi)的接口轉(zhuǎn)換成我們需要的接口,從而實(shí)現(xiàn)類(lèi)的復(fù)用。
  4. 適配器模式可以用于封裝有缺陷的接口設(shè)計(jì),使得客戶(hù)可以通過(guò)適配器來(lái)使用這些缺陷的接口,而無(wú)需直接與其交互。
  5. 替換依賴(lài)的外部系統(tǒng),使得系統(tǒng)可以在不修改源代碼的情況下適應(yīng)新的外部系統(tǒng)。

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

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

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

相關(guān)文章

  • Java與設(shè)計(jì)模式(7):適配器模式

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

    2024年02月11日
    瀏覽(21)
  • Java設(shè)計(jì)模式之適配器模式詳解

    大家好,我是免費(fèi)搭建查券返利機(jī)器人賺傭金就用微賺淘客系統(tǒng)3.0的小編,也是冬天不穿秋褲,天冷也要風(fēng)度的程序猿!在今天的篇章中,我們將深入探討Java設(shè)計(jì)模式的奇妙世界,而焦點(diǎn)就是適配器模式。這種模式就像是代碼變換的藝術(shù)大師,讓不同的接口和類(lèi)在項(xiàng)目中和諧

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

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

    ? 與電源適配器相似,在適配器模式中引入了一個(gè)被稱(chēng)為適配器(Adapter)的包裝類(lèi),而它所包裝的對(duì)象稱(chēng)為適配者(Adaptee),即被適配的類(lèi)。適配器的實(shí)現(xiàn)就是把客戶(hù)類(lèi)的請(qǐng)求轉(zhuǎn)化為對(duì)適配者的相應(yīng)接口的調(diào)用。也就是說(shuō):當(dāng)客戶(hù)類(lèi)調(diào)用適配器的方法時(shí),在適配器類(lèi)的內(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è)類(lèi)的接口轉(zhuǎn)換成客戶(hù)端期望的另一個(gè)接口 。這種模式使得原本由于接口不兼容而不能一起工作的類(lèi)可以一起工作。在本文中,我們將介紹 Java 中適配器模式的定義、結(jié)構(gòu)、使用場(chǎng)景以及如何在實(shí)際開(kāi)發(fā)中應(yīng)用。

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

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

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

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

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

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

    2023年04月26日
    瀏覽(19)
  • 設(shè)計(jì)模式——適配器模式

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

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

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

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

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

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

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

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

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

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

    2023年04月09日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包