最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式之適配器模式的示例詳解

 更新時(shí)間:2022年02月18日 16:06:05   作者:溫故知新之java  
適配器模式,即將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口的表示,主要目的是實(shí)現(xiàn)兼容性,讓原本因?yàn)榻涌诓黄ヅ洌瑳]辦法一起工作的兩個(gè)類,可以協(xié)同工作。本文將通過示例詳細(xì)介紹適配器模式,需要的可以參考一下

定義

適配器模式,即將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口的表示,主要目的是實(shí)現(xiàn)兼容性,讓原本因?yàn)榻涌诓黄ヅ洌瑳]辦法一起工作的兩個(gè)類,可以協(xié)同工作。

分類

  • 類適配器
  • 對象適配器
  • 接口適配器

案例

需求

手機(jī)充電,通過手機(jī)充電器將220V電壓適配為5V

方案一:類適配器

定義220V交流電(被適配者的角色)

/**
 * 220V交流電(被適配者的角色)
 * @author:liyajie
 * @createTime:2022/2/17 21:41
 * @version:1.0
 */
public class Ac {
    public int outputAc(){
        int srcV = 220;
        System.out.println(srcV + "V交流電");
        return srcV;
    }
}

定義5v直流電(目標(biāo)對象的角色)

/**
 * 5v直流電(目標(biāo)對象的角色)
 * @author:liyajie
 * @createTime:2022/2/17 21:44
 * @version:1.0
 */
public interface Dc {

    int outputDc();
}

定義適配器

/**
 * 手機(jī)充電適配器
 * @author:liyajie
 * @createTime:2022/2/17 21:45
 * @version:1.0
 */
public class PhoneAdapter extends Ac implements Dc{

    @Override
    public int outputDc() {
        // 獲取220V交流電
        int srcV = outputAc();
        // 模擬適配器過程,轉(zhuǎn)換為5v直流電
        int targetV = srcV / 44;
        System.out.println("電壓已經(jīng)適配為" + targetV + "V" );
        return targetV;
    }
}

定義手機(jī)類

/**
 * 手機(jī)類
 * @author:liyajie
 * @createTime:2022/2/17 21:48
 * @version:1.0
 */
public class Phone {
    public void charge(Dc dc){
        if(dc.outputDc() == 5){
            System.out.println("電壓正常,可以安全充電");
        }else {
            System.out.println("電壓異常,危險(xiǎn)!");
        }
    }
}

定義測試類

/**
 * 測試類
 * @author:liyajie
 * @createTime:2022/2/18 10:56
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        new Phone().charge(new PhoneAdapter());
    }
}

查看測試結(jié)果

方案二:對象適配器

該方案只需要改造手機(jī)適配器類即可,如下:

/**
 * 手機(jī)充電適配器
 * @author:liyajie
 * @createTime:2022/2/17 21:45
 * @version:1.0
 */
public class PhoneAdapter implements Dc {

    private Ac ac;

    public PhoneAdapter(Ac ac){
        this.ac = ac;
    }

    @Override
    public int outputDc() {
        // 獲取220V交流電
        int srcV = ac.outputAc();
        // 模擬適配器過程,轉(zhuǎn)換為5v直流電
        int targetV = srcV / 44;
        System.out.println("電壓已經(jīng)適配為" + targetV + "V" );
        return targetV;
    }
}

改造測試類

/**
 * 測試類
 * @author:liyajie
 * @createTime:2022/2/18 11:12
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        new Phone().charge(new PhoneAdapter(new Ac()));
    }
}

查看測試結(jié)果

方案三:接口適配器

需要改造的如下: 定義一個(gè)默認(rèn)的適配器,作用是實(shí)現(xiàn)Dc的多個(gè)方法,使其他的自定義適配器用來繼承,擴(kuò)展

/**
 * 默認(rèn)適配器
 * @author:liyajie
 * @createTime:2022/2/17 21:45
 * @version:1.0
 */
public class DefaultAdapter implements Dc {

    @Override
    public int outputDc() {
        return 0;
    }
}

定義手機(jī)適配器

/**
 * 手機(jī)充電適配器
 * @author:liyajie
 * @createTime:2022/2/17 21:45
 * @version:1.0
 */
public class PhoneAdapter extends DefaultAdapter {

    private Ac ac;

    public PhoneAdapter(Ac ac){
        this.ac = ac;
    }

    @Override
    public int outputDc() {
        // 獲取220V交流電
        int srcV = ac.outputAc();
        // 模擬適配器過程,轉(zhuǎn)換為5v直流電
        int targetV = srcV / 44;
        System.out.println("電壓已經(jīng)適配為" + targetV + "V" );
        return targetV;
    }
}

定義手機(jī)類

/**
 * 手機(jī)類
 * @author:liyajie
 * @createTime:2022/2/17 21:48
 * @version:1.0
 */
public class Phone {
    public void charge(int v){
        if(v == 5){
            System.out.println("電壓正常,可以安全充電");
        }else {
            System.out.println("電壓異常,危險(xiǎn)!");
        }
    }
}

定義測試類

/**
 * 測試類
 * @author:liyajie
 * @createTime:2022/2/18 11:57
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        new Phone().charge(new PhoneAdapter(new Ac()).outputDc());
    }
}

查看測試結(jié)果

對比分析

方案一:類適配器

  • 優(yōu)勢:由于它是繼承被適配者,可以根據(jù)需求,重寫被適配者的方法,靈活性較好
  • 劣勢:由于繼承是單繼承屬性的,目標(biāo)對象必須是一個(gè)接口,有一定的局限性

方案二:對象適配器

改造適配類,將繼承被適配者,修改為持有被適配者,遵循合成復(fù)用原則,使用關(guān)聯(lián)關(guān)系代替繼承關(guān)系,進(jìn)一步解耦,提高擴(kuò)展性

方案三:接口適配器

接口適配器模式,又叫缺省適配器模式,通過設(shè)計(jì)一個(gè)中間抽象類,去實(shí)現(xiàn)接口,為接口中的每個(gè)方法都提供一個(gè)默認(rèn)實(shí)現(xiàn),然后再定義一個(gè)具體的適配器繼承默認(rèn)的適配器,只需要重寫自己需要重寫的方法即可

總結(jié)

適配器模式的三種實(shí)現(xiàn)方式,類適配器模式有一定的局限性,其中最常用的是對象適配器模式,所以比較推薦的是對象適配器模式

到此這篇關(guān)于Java設(shè)計(jì)模式之適配器模式的示例詳解的文章就介紹到這了,更多相關(guān)Java適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線圖)

    使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線圖)

    用Jfree實(shí)現(xiàn)條形柱狀圖表,java代碼實(shí)現(xiàn)??山?jīng)常用于報(bào)表的制作,代碼自動生成后可以自由查看??梢宰杂膳渲脠D表的各個(gè)屬性,用來達(dá)到自己的要求和目的。本文給大家介紹使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線圖),需要的朋友可以參考下
    2015-10-10
  • json如何解析混合數(shù)組對象到實(shí)體類的list集合里去

    json如何解析混合數(shù)組對象到實(shí)體類的list集合里去

    這篇文章主要介紹了json解析混合數(shù)組對象到實(shí)體類的list集合里去的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java設(shè)計(jì)模式-組合模式詳解

    java設(shè)計(jì)模式-組合模式詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之組合模式,簡單說明了組合模式的原理,并結(jié)合實(shí)例分析了java組合模式的具體用法,需要的朋友可以參考下
    2021-07-07
  • Java中的垃圾收集器詳解

    Java中的垃圾收集器詳解

    這篇文章主要介紹了Java中的垃圾收集器詳解,垃圾收集機(jī)制是?Java?的招牌能力,極大地提高了開發(fā)效率,如今垃圾收集幾乎成為現(xiàn)代語言的標(biāo)配,需要的朋友可以參考下
    2023-07-07
  • Java數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)

    Java數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)

    下面小編就為大家?guī)硪黄狫ava數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 一文帶你了解Java萬物之基之Object類

    一文帶你了解Java萬物之基之Object類

    Java是一門天然的面向?qū)ο蟮恼Z言。而所有我們手動創(chuàng)造出來的類,都繼承于同一個(gè)類,即Object類。本文將通過示例為大家詳細(xì)介紹一下Java中的Object類,需要的可以參考一下
    2022-03-03
  • Java中的CompletionService批量異步執(zhí)行詳解

    Java中的CompletionService批量異步執(zhí)行詳解

    這篇文章主要介紹了Java中的CompletionService批量異步執(zhí)行詳解,我們知道線程池可以執(zhí)行異步任務(wù),同時(shí)可以通過返回值Future獲取返回值,所以異步任務(wù)大多數(shù)采用ThreadPoolExecutor+Future,需要的朋友可以參考下
    2023-12-12
  • SpringBoot訪問HTML過程詳解

    SpringBoot訪問HTML過程詳解

    這篇文章主要詳細(xì)介紹了SpringBoot訪問HTML的全過程,文章中有詳細(xì)的代碼和圖片講解,感興趣的同學(xué)可以參考一下
    2023-04-04
  • SpringBoot接口加密與解密的實(shí)現(xiàn)

    SpringBoot接口加密與解密的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot接口加密與解密的實(shí)現(xiàn)
    2023-10-10
  • JDBC對MySQL數(shù)據(jù)庫布爾字段的操作方法

    JDBC對MySQL數(shù)據(jù)庫布爾字段的操作方法

    這篇文章主要介紹了JDBC對MySQL數(shù)據(jù)庫布爾字段的操作方法,實(shí)例分析了JDBC操作mysql布爾字段的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-02-02

最新評論

游戏| 安岳县| 万载县| 景德镇市| 汉沽区| 都昌县| 汶川县| 民丰县| 永川市| 两当县| 常山县| 五原县| 伽师县| 长治县| 平塘县| 绿春县| 新丰县| 聂荣县| 贵州省| 祁阳县| 忻州市| 大港区| 库伦旗| 临夏市| 海城市| 靖安县| 玛多县| 美姑县| 金平| 丰城市| 武威市| 会同县| 额敏县| 南充市| 于都县| 松潘县| 九龙城区| 连江县| 株洲县| 侯马市| 观塘区|