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

Java十分鐘精通進階適配器模式

 更新時間:2022年04月06日 10:03:23   作者:熱愛飛行的小應(yīng)學(xué)長  
適配器模式(Adapter?Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨立接口的功能

1、什么是適配器模式?

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

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

2、適配器模式的定義

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

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

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

優(yōu)點:

  • 客戶端通過適配器可以透明地調(diào)用目標(biāo)接口
  • 復(fù)用了現(xiàn)存的類,程序員不需要修改原有代碼而重用現(xiàn)有的適配者類
  • 將目標(biāo)類和適配者類解耦,解決了目標(biāo)類和適配者類接口不一致的問題
  • 在很多業(yè)務(wù)場景中符合開閉原則

缺點:

  • 適配器編寫過程需要結(jié)合業(yè)務(wù)場景全面考慮,可能會增加系統(tǒng)的復(fù)雜性
  • 增加代碼閱讀難度,降低代碼可讀性,過多使用適配器會使系統(tǒng)代碼變得凌亂

4、適配器模式的結(jié)構(gòu)與實現(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)類: 它是一個轉(zhuǎn)換器,通過繼承或引用適配者的對象,把適配者接口轉(zhuǎn)換成目標(biāo)接口,讓客戶按目標(biāo)接口的格式訪問適配者

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

三相插座接口:

/**
 * 三相插座接口
 */
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)換
使用二相電流供電

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

特點:

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

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

在這里插入圖片描述

繼承適配器:

/**
 * 采用繼承方式的插座適配器
 */
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)換
使用二相電流供電

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

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

特點:

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

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

  • 之前開發(fā)的系統(tǒng)存在滿足新系統(tǒng)功能需求的類,但其接口同新系統(tǒng)的接口不一致
  • 使用第三方提供的組件,但組件接口定義和自己要求的接口定義不同

最后,祝大家假期愉快~~~~

到此這篇關(guān)于Java十分鐘精通進階適配器模式的文章就介紹到這了,更多相關(guān)Java 適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring boot配置多數(shù)據(jù)源代碼實例

    Spring boot配置多數(shù)據(jù)源代碼實例

    這篇文章主要介紹了Spring boot配置多數(shù)據(jù)源代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 詳解SSM框架下結(jié)合log4j、slf4j打印日志

    詳解SSM框架下結(jié)合log4j、slf4j打印日志

    本篇文章主要介紹了詳解SSM框架下結(jié)合log4j、slf4j打印日志,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Hibernate中實現(xiàn)增刪改查的步驟詳解

    Hibernate中實現(xiàn)增刪改查的步驟詳解

    本篇文章主要介紹了Hibernate中實現(xiàn)增刪改查的步驟與方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Spring中@RestControllerAdvice注解的使用詳解

    Spring中@RestControllerAdvice注解的使用詳解

    這篇文章主要介紹了Spring中@RestControllerAdvice注解的使用詳解,@RestControllerAdvice是一個組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,需要的朋友可以參考下
    2024-01-01
  • 利用Java實現(xiàn)圖片轉(zhuǎn)化為ASCII圖的示例代碼

    利用Java實現(xiàn)圖片轉(zhuǎn)化為ASCII圖的示例代碼

    本文將詳細講解如何利用 Java 實現(xiàn)圖片轉(zhuǎn)化為 ASCII 圖,從項目背景與意義、相關(guān)技術(shù)知識,到系統(tǒng)需求與架構(gòu)設(shè)計,再到詳細實現(xiàn)思路、完整代碼和代碼解讀,最后對項目進行總結(jié)與展望,需要的朋友可以參考下
    2025-03-03
  • SpringBoot3結(jié)合gRpc實現(xiàn)遠程服務(wù)調(diào)用的流程步驟

    SpringBoot3結(jié)合gRpc實現(xiàn)遠程服務(wù)調(diào)用的流程步驟

    gRPC是一個現(xiàn)代開源高性能遠程過程調(diào)用(RPC)框架,可以在任何環(huán)境中運行,它由Google開發(fā),旨在幫助開發(fā)人員更輕松地構(gòu)建分布式應(yīng)用,特別是當(dāng)代碼可能在不同地方運行的時候,本文介紹了SpringBoot3結(jié)合gRpc實現(xiàn)遠程服務(wù)調(diào)用的流程步驟,需要的朋友可以參考下
    2024-07-07
  • 全面解讀Spring Boot 中的Profile配置體系

    全面解讀Spring Boot 中的Profile配置體系

    配置體系是基于 Spring Boot 框架開發(fā)應(yīng)用程序的基礎(chǔ),而自動配置也是該框架的核心功能之一。本文梳理Spring Boot 中的Profile配置體系的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 基于javassist進行動態(tài)編程過程解析

    基于javassist進行動態(tài)編程過程解析

    這篇文章主要介紹了基于javassist進行動態(tài)編程過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • java 獲取日期的幾天前,幾個月前和幾年前的實例

    java 獲取日期的幾天前,幾個月前和幾年前的實例

    下面小編就為大家?guī)硪黄猨ava 獲取日期的幾天前,幾個月前和幾年前的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • springboot openfeign從JSON文件讀取數(shù)據(jù)問題

    springboot openfeign從JSON文件讀取數(shù)據(jù)問題

    今天主要說一下在openfeign里讀取JSON文件的問題,我們將測試所需要的數(shù)據(jù)存儲到文件里,在修改時關(guān)注點比較單純
    2018-06-06

最新評論

平乐县| 德阳市| 钟山县| 白水县| 荣昌县| 安平县| 祥云县| 出国| 开阳县| 大丰市| 怀集县| 专栏| 深水埗区| 浏阳市| 会宁县| 延边| 通州区| 延长县| 日喀则市| 黄平县| 京山县| 从化市| 华安县| 凌海市| 乡城县| 浦江县| 容城县| 电白县| 历史| 南充市| 虎林市| 镇原县| 泗水县| 武功县| 孝义市| 江门市| 马龙县| 平谷区| 开鲁县| 广饶县| 通江县|