在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是適配器模式

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-09 11:16 ? 次閱讀

1、什么是適配器模式?

Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.

適配器模式(Adapter Pattern):將一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。

說人話:這個模式就是用來做適配的,它將不兼容的接口轉換為可兼容的接口,讓原本由于接口不兼容而不能一起工作的類可以一起工作。比如現實生活中的例子, USB 轉接頭就充當適配器,把兩種不兼容的接口,通過轉接變得可以一起工作。

2、適配器模式定義

圖片

①、Target目標角色

該角色定義把其他類轉換為何種接口, 也就是我們的期望接口, 例子中的IUserInfo接口就是目標角色。

②、Adaptee源角色

你想把誰轉換成目標角色, 這個“誰”就是源角色, 它是已經存在的、 運行良好的類或對象, 經過適配器角色的包裝, 它會成為一個嶄新、 靚麗的角色。

③、Adapter適配器角色

適配器模式的核心角色, 其他兩個角色都是已經存在的角色, 而適配器角色是需要新建立的, 它的職責非常簡單:把源角色轉換為目標角色, 怎么轉換?通過繼承或是類關聯的方式。

3、適配器模式通用代碼實現

/**
 * 目標角色
 */
public interface Target {
    void t1();
    void t2();
    void t3();
}
/**
 * 目標角色實現類
 */
public class ConcreteTarget implements Target{

    @Override
    public void t1() {
        System.out.println("目標角色 t1 方法");
    }

    @Override
    public void t2() {
        System.out.println("目標角色 t2 方法");
    }

    @Override
    public void t3() {
        System.out.println("目標角色 t3 方法");
    }
}
/**
 * 源角色:要把源角色轉換成目標角色
 */
public class Adaptee {

    public void a1(){
        System.out.println("源角色 a1 方法");
    }

    public void a2(){
        System.out.println("源角色 a2 方法");
    }

    public void a3(){
        System.out.println("源角色 a3 方法");
    }
}

基于繼承的類適配器

/**
 * 適配器角色
 */
public class Adapter extends Adaptee implements Target{

    @Override
    public void t1() {
        super.a1();
    }

    @Override
    public void t2() {
        super.a2();
    }

    @Override
    public void t3() {
        super.a3();
    }
}

基于組合的對象適配器

public class AdapterCompose implements Target{

    private Adaptee adaptee;

    public AdapterCompose(Adaptee adaptee){
        this.adaptee = adaptee;
    }
    @Override
    public void t1() {
        adaptee.a1();
    }

    @Override
    public void t2() {
        adaptee.a2();
    }

    @Override
    public void t3() {
        adaptee.a3();
    }
}

測試:

public class AdapterClient {

    public static void main(String[] args) {
        // 原有的業務邏輯
        Target target = new ConcreteTarget();
        target.t1();

        // 基于繼承 增加適配器業務邏輯
        Target target1 = new Adapter();
        target1.t1();

        // 基于組合 增加適配器業務邏輯
        Target target2 = new AdapterCompose(new Adaptee());
        target2.t1();
    }
}

打印結果:

圖片

適配器模式有兩種實現方式:類適配器和對象適配器。其中,類適配器使用繼承關系來實現,對象適配器使用組合關系來實現。在實際開發中,選擇的依據如下:

①、如果 Adaptee 接口并不多,那兩種實現方式都可以。

②、如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定義大部分都相同,那我們推薦使用類適配器,因為 Adaptor 復用父類 Adaptee 的接口,比起對象適配器的實現方式,Adaptor 的代碼量要少一些。

③、如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定義大部分都不相同,那我們推薦使用對象適配器,因為組合結構相對于繼承更加靈活。

4、適配器模式優點

①、適配器模式可以讓兩個沒有任何關系的類在一起運行, 只要適配器這個角色能夠搞定他們就成。

②、增加了類的透明性

我們訪問的Target目標角色, 但是具體的實現都委托給了源角色, 而這些對高層次模塊是透明的, 也是它不需要關心的。

③、提高了類的復用度

源角色在原有的系統中還是可以正常使用, 而在目標角色中也可以充當新的演員。

④、靈活性非常好

適配器可以隨時去掉,而不會影響很多代碼。

5、適配器模式應用場景

①、修改已使用的接口

某個已經投產中的接口需要修改,這時候使用適配器最好。

②、統一多個類的接口設計

比如對于敏感詞過濾,需要調用好幾個第三方接口,每個接口方法名,方法參數又不一樣,這時候使用適配器模式,將所有第三方的接口適配為統一的接口定義。

③、兼容老版本接口

比如JDK1.0 中包含一個遍歷集合容器的類 Enumeration,JDK2.0 對這個類進行了重構,將它改名為 Iterator 類,并且對它的代碼實現做了優化。但是考慮到如果將 Enumeration 直接從 JDK2.0 中刪除,那使用 JDK1.0 的項目如果切換到 JDK2.0,代碼就會編譯不通過。為了避免這種情況的發生,我們必須把項目中所有使用到 Enumeration 的地方,都修改為使用 Iterator 才行。

單獨一個項目做 Enumeration 到 Iterator 的替換,勉強還能接受。但是,使用 Java 開發的項目太多了,一次 JDK 的升級,導致所有的項目不做代碼修改就會編譯報錯,這顯然是不合理的。這就是我們經常所說的不兼容升級。為了做到兼容使用低版本 JDK 的老代碼,我們可以暫時保留 Enumeration 類,并將其實現替換為直接調用 Itertor。

public class Collections {
  public static Emueration emumeration(final Collection c) {
    return new Enumeration() {
      Iterator i = c.iterator();
      
      public boolean hasMoreElments() {
        return i.hashNext();
      }
      
      public Object nextElement() {
        return i.next():
      }
    }
  }
}

④、適配不同格式的數據

6、代理-橋接-裝飾器-適配器區別

①、代理模式在不改變原始類接口的條件下,為原始類定義一個代理類,主要目的是控制訪問,而非加強功能,這是它跟裝飾器模式最大的不同。

②、橋接模式:橋接模式的目的是將接口部分和實現部分分離,從而讓它們可以較為容易、也相對獨立地加以改變。

③、裝飾器模式:裝飾者模式在不改變原始類接口的情況下,對原始類功能進行增強,并且支持多個裝飾器的嵌套使用。

④、適配器模式:適配器模式是一種事后的補救策略。適配器提供跟原始類不同的接口,而代理模式、裝飾器模式提供的都是跟原始類相同的接口。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151919
  • 適配器
    +關注

    關注

    8

    文章

    1972

    瀏覽量

    68262
  • 代碼
    +關注

    關注

    30

    文章

    4827

    瀏覽量

    69053
  • ADAPTOR
    +關注

    關注

    0

    文章

    2

    瀏覽量

    5543
收藏 人收藏

    評論

    相關推薦

    適配器模式和代理模式的區別

    對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了中介的作用和保護了目標對象的作用。  (3)高擴展性    適配器模式  在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝
    發表于 10-22 15:17

    適配器模式實現

    目錄第一章 適配器模式介紹第二章 適配器模式實現(類適配器)2.1、關系依賴圖2.2、創建交流電2.3、定義直流電2.4、創建充電器2.5、
    發表于 09-15 07:11

    適配器模式的作用

    適配器模式的作用是解決兩個軟件實體間的接口不兼容的問題。使用適配器模式之后,原本由于接口不兼容而不能工作的兩個軟件實體可以一起工作。港式插頭轉換器
    發表于 11-11 06:30

    適配器模式相關資料推薦

    結構型模式一、適配器模式(一)定義:適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁,它結合了兩個獨立接口的功能
    發表于 11-11 06:03

    缺省適配器模式基本概念

    在這一節我們就看一看第一類:缺省適配器模式一、缺省適配器模式基本概念1.1 說明當不需要全部實現接口提供的方法時,可以設計一個適配器抽象類實
    發表于 11-11 07:53

    對象適配器模式基本概念

    在這一節我們就看一看第一類:對象適配器模式一、對象適配器模式基本概念1.1 說明對象適配器模式
    發表于 11-11 07:09

    什么是硬件適配器模式

    硬件適配器模式提供一種方法,使已經存在的硬件接口能適應應用期望。當應用需要使用一個接口而硬件提供另一種時,硬件適配器模式創建元素在兩個接口之間進行轉換。
    發表于 12-21 07:55

    適配器模式的本質及分類

    什么是適配器 在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。一個適配
    發表于 10-18 15:06 ?3181次閱讀

    適配器模式和代理模式的區別

    適配器模式適配器模式有時候也稱包裝樣式或者包裝。將一個類的接口轉接成用戶所期待的。代理模式:為其他對象提供一種代理以控制對這個對象的訪問。
    發表于 01-12 11:56 ?5295次閱讀
    <b class='flag-5'>適配器</b><b class='flag-5'>模式</b>和代理<b class='flag-5'>模式</b>的區別

    適配器模式的應用

    在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已
    發表于 01-12 14:28 ?1023次閱讀
    <b class='flag-5'>適配器</b><b class='flag-5'>模式</b>的應用

    JavaScript設計模式適配器模式

    適配器模式的作用是解決兩個軟件實體間的接口不兼容的問題。使用適配器模式之后,原本由于接口不兼容而不能工作的兩個軟件實體可以一起工作。港式插頭轉換器
    發表于 11-06 16:21 ?5次下載
    JavaScript設計<b class='flag-5'>模式</b>之<b class='flag-5'>適配器</b><b class='flag-5'>模式</b>

    設計模式-適配器模式-以電壓適配器為例

    超級鏈接: Java常用設計模式的實例學習系列-緒論參考:《HeadFirst設計模式》1.關于適配器模式適配器
    發表于 11-07 09:36 ?17次下載
    設計<b class='flag-5'>模式</b>-<b class='flag-5'>適配器</b><b class='flag-5'>模式</b>-以電壓<b class='flag-5'>適配器</b>為例

    適配器模式設計

    適配器模式一般是在我們要把”現有的對象“應用到新的環境中時使用,通過編寫一個Adapter類,把原有的類應用到新的類中,而不必修改原有類,也不必重寫已有類。
    的頭像 發表于 06-01 14:22 ?735次閱讀
    <b class='flag-5'>適配器</b><b class='flag-5'>模式</b>設計

    什么是適配器模式?怎樣使用適配器模式進行貨幣轉換?

    在軟件開發中,通常使用具有不兼容接口的現有代碼或外部庫。 適配器模式提供了一個優雅的解決方案,充當不兼容接口之間的橋梁,無需修改現有代碼即可實現無縫集成。
    的頭像 發表于 07-19 14:35 ?666次閱讀

    設計模式中什么是適配器模式

    適配器模式(Adapter),將一個類的接口適配成用戶所期待的。
    的頭像 發表于 08-02 10:00 ?878次閱讀
    設計<b class='flag-5'>模式</b>中什么是<b class='flag-5'>適配器</b><b class='flag-5'>模式</b>?
    主站蜘蛛池模板: 色综合免费视频 | 中国女人a毛片免费全部播放 | 天天澡天天干 | 亚洲另类激情综合偷自拍 | 天天干天天色天天射 | 国产资源在线视频 | 国产精品午夜自在在线精品 | 久久黄网站 | 欧美黑人黄色片 | 天堂在线最新资源 | 久久久99精品免费观看精品 | 国产精品va在线观看不 | 日韩成人一级 | 给个网站可以在线观看你懂的 | 天天玩天天操 | 色天使网 | 五月婷婷网址 | 色女人网| 手机看片国产免费永久 | 国产精品久久久久久久免费 | 黄视频福利 | 日本亚洲在线 | 中国一级特黄剌激爽毛片 | 久久天天躁夜夜躁狠狠躁2020 | 亚洲国产第一区二区香蕉 | 国产精品国产三级国产在线观看 | 18性夜影院午夜寂寞影院免费 | 亚洲天堂婷婷 | 亚洲综合精品 | 狠狠se| 欧美性精品 | 神马影院午夜在线 | 在线一区二区观看 | 狠狠躁夜夜躁人人躁婷婷视频 | 最好看免费中文字幕2018视频 | 天天艹天天 | 手机在线电影你懂的 | 香蕉视频色版在线观看 | 中国日韩欧美中文日韩欧美色 | 亚洲影视大全 | 午夜网站在线播放 |