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

java設(shè)計(jì)模式之淺談適配器模式

 更新時(shí)間:2021年06月06日 14:53:58   作者:RYGAR  
我們現(xiàn)實(shí)生活中的適配器不少.例如,我們使用存儲(chǔ)卡適配器連接存儲(chǔ)卡和一個(gè)計(jì)算機(jī),因?yàn)橛?jì)算機(jī)僅支持一種類型的存儲(chǔ)卡和我們的卡不與計(jì)算機(jī)兼容,適配器是兩種不相容的實(shí)體之間的轉(zhuǎn)換器,適配器模式是一種結(jié)構(gòu)模式.本文就帶大家了解一下java適配器模式,需要的朋友可以參考下

一、結(jié)構(gòu)型模式

結(jié)構(gòu)型模式有什么好處?
從程序的結(jié)構(gòu)上實(shí)現(xiàn)松耦合,從而可以擴(kuò)大整體的類結(jié)構(gòu),用來解決更大的問題

二、適配器模式

USB網(wǎng)線轉(zhuǎn)換器

在這里插入圖片描述

三、什么是適配器模式?

將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本接口不兼容而不能一起工作的那些類能夠變得在一起工作!

四、角色分析

目標(biāo)接口:客戶所期待的接口,目標(biāo)可以是具體的或抽象的類,也可以是接口
需要適配的類:需要適配的類或適配者類
適配器:通過包裝一個(gè)需要適配的對(duì)象,把原接口轉(zhuǎn)換成目標(biāo)對(duì)象!
例子:

適配的類:網(wǎng)線

package com.jialidun.gof.adapter;

//要被適配的類:網(wǎng)線
public class Adaptee {

    public void request(){
        System.out.println("連接網(wǎng)線上網(wǎng)!");
    }
}

接口轉(zhuǎn)換器的抽象方法

package com.jialidun.gof.adapter;

//接口轉(zhuǎn)換器的抽象實(shí)現(xiàn)
public interface NetToUsb {

    //作用:處理請(qǐng)求 網(wǎng)線插到USB上
    public void hanleRequest();

}

真正的適配器,需要連接USB,連接網(wǎng)線

package com.jialidun.gof.adapter;

//真正的適配器,需要連接USB,連接網(wǎng)線
//方式1 繼承(類適配器、單繼承)
public class Adapter extends Adaptee implements NetToUsb{


    @Override
    public void hanleRequest() {
        super.request();//可以上網(wǎng)了
    }
}

創(chuàng)建客戶端,需要上網(wǎng),網(wǎng)線不匹配

package com.jialidun.gof.adapter;

//客戶端類:想上網(wǎng),插不上網(wǎng)線
public class Computer {

    //我們的電腦需要連接上轉(zhuǎn)接器才可以上網(wǎng)
    public void net(NetToUsb adapter){
        //上網(wǎng)的具體實(shí)現(xiàn),找一個(gè)轉(zhuǎn)接頭

        adapter.hanleRequest();

    }

    public static void main(String[] args) {
        //電腦  適配器  網(wǎng)線
        Computer computer = new Computer();//電腦
        Adaptee adaptee = new Adaptee();//網(wǎng)線
        Adapter adapter = new Adapter();//轉(zhuǎn)接器

        computer.net(adapter);



    }
}

上面的例子有局限性,盡量不使用繼承,修改方法

修改適配器

package com.jialidun.gof.adapter;

//方式2  組合(對(duì)象適配器、常用)
public class Adaapter2 implements NetToUsb{
    private Adaptee adaptee;

    public Adaapter2(Adaptee adaptee){
        this.adaptee = adaptee;
    }


    @Override
    public void hanleRequest() {
        adaptee.request();
    }
}

客戶端

package com.jialidun.gof.adapter;

//客戶端類:想上網(wǎng),插不上網(wǎng)線
public class Computer {

    //我們的電腦需要連接上轉(zhuǎn)接器才可以上網(wǎng)
    public void net(NetToUsb adapter){
        //上網(wǎng)的具體實(shí)現(xiàn),找一個(gè)轉(zhuǎn)接頭

        adapter.hanleRequest();

    }

    public static void main(String[] args) {
        //電腦  適配器  網(wǎng)線
//        Computer computer = new Computer();//電腦
//        Adaptee adaptee = new Adaptee();//網(wǎng)線
//        Adapter adapter = new Adapter();//轉(zhuǎn)接器
//
//        computer.net(adapter);


        Computer computer = new Computer();//電腦
        Adaptee adaptee = new Adaptee();//網(wǎng)線
        Adaapter2 adaapter2 = new Adaapter2(adaptee);
        adaapter2.hanleRequest();



    }
}

在這里插入圖片描述

五、對(duì)象適配器有哪些優(yōu)點(diǎn)

1.一個(gè)對(duì)象適配器可以把多個(gè)不同的適配者適配到同一個(gè)目標(biāo)。

2.可以適配一個(gè)適配者的子類,由于適配器和適配者之間是關(guān)聯(lián)關(guān)系,根據(jù)"里氏替換原則",適配者的子類也可通過該適配器進(jìn)行適配。

六、類適配器缺點(diǎn)

對(duì)于Java、C#等不支持多重類繼承的語言,一次最多只能適配一個(gè)適配者類,不能同時(shí)適配多個(gè)適配者;
在Java、C#等語言中,類適配器模式中的目標(biāo)抽象類只能為接口,不能為類,其使用有一定的局限性。

七、使用場(chǎng)景

系統(tǒng)需要使用一些現(xiàn)有的類,而這些類的接口(如方法名)不符合系統(tǒng)的需求,甚至沒有這些類的源代碼。
想創(chuàng)建一個(gè)重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進(jìn)的類一起工作。
例如SpringMVC中DispacherServlet、HandlerAdpter等

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

相關(guān)文章

  • Spring中的@Resource源碼解析

    Spring中的@Resource源碼解析

    這篇文章主要介紹了Spring中的@Resource源碼解析,這個(gè)注解加載的時(shí)候經(jīng)過的類是CommonAnnotationBeanPostProcessor和Autowired一樣,也是postProcessProperties()方法,需要的朋友可以參考下
    2023-09-09
  • java跳出循環(huán)的方式匯總

    java跳出循環(huán)的方式匯總

    本文介紹了Java中三種常用的跳出循環(huán)的語句:break、continue和return,break用于完全結(jié)束循環(huán)并跳出循環(huán)體;continue用于跳過本次循環(huán)體中尚未執(zhí)行的語句,開始下一次循環(huán);return用于結(jié)束方法,每種方法給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • Mybatis基于xml配置實(shí)現(xiàn)單表的增刪改查功能

    Mybatis基于xml配置實(shí)現(xiàn)單表的增刪改查功能

    這篇文章主要介紹了Mybatis基于xml配置實(shí)現(xiàn)單表的增刪改查,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 解決FileWriter 寫入文本不換行的問題

    解決FileWriter 寫入文本不換行的問題

    這篇文章主要介紹了解決FileWriter 寫入文本不換行的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringMVC?RESTFul實(shí)戰(zhàn)案例修改功能實(shí)現(xiàn)

    SpringMVC?RESTFul實(shí)戰(zhàn)案例修改功能實(shí)現(xiàn)

    這篇文章主要為大家介紹了SpringMVC?RESTFul實(shí)戰(zhàn)案例修改功能實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制

    Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制

    這篇文章主要介紹了Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制,在Java運(yùn)行時(shí),RTTI維護(hù)類的相關(guān)信息,比如多態(tài)(polymorphism)就是基于RTTI實(shí)現(xiàn)的,需要的朋友可以參考下
    2014-09-09
  • springboot+thymeleaf國際化之LocaleResolver接口的示例

    springboot+thymeleaf國際化之LocaleResolver接口的示例

    本篇文章主要介紹了springboot+thymeleaf國際化之LocaleResolver的示例 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java Socket實(shí)現(xiàn)文件傳輸示例代碼

    Java Socket實(shí)現(xiàn)文件傳輸示例代碼

    這篇文章主要介紹了Java Socket實(shí)現(xiàn)文件傳輸示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java 利用DeferredResult實(shí)現(xiàn)http輪詢實(shí)時(shí)返回?cái)?shù)據(jù)接口

    Java 利用DeferredResult實(shí)現(xiàn)http輪詢實(shí)時(shí)返回?cái)?shù)據(jù)接口

    這篇文章主要介紹了Java 利用 DeferredResult 實(shí)現(xiàn) http 輪詢實(shí)時(shí)返回?cái)?shù)據(jù)接口,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • IDEA2022創(chuàng)建Maven Web項(xiàng)目教程(圖文)

    IDEA2022創(chuàng)建Maven Web項(xiàng)目教程(圖文)

    本文主要介紹了IDEA2022創(chuàng)建Maven Web項(xiàng)目教程,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論

松原市| 文成县| 永州市| 哈密市| 益阳市| 故城县| 乌什县| 北票市| 封开县| 基隆市| 获嘉县| 泗阳县| 都兰县| 大方县| 光泽县| 富裕县| 仁怀市| 海阳市| 武乡县| 乌什县| 松江区| 榆林市| 藁城市| 隆回县| 富锦市| 巴东县| 新昌县| 定襄县| 诸城市| 平乡县| 额尔古纳市| 长垣县| 泾源县| 莎车县| 平定县| 蒲江县| 句容市| 西吉县| 青龙| 峨山| 琼海市|