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

設(shè)計模式 06 適配器模式

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

適配器模式(Adapter Pattern)屬于結(jié)構(gòu)型模式

概述

結(jié)構(gòu)型模式關(guān)注如何將現(xiàn)有的類或?qū)ο蠼M織在一起形成更加強大的結(jié)構(gòu)。

在生活中,我們經(jīng)常遇到這樣的一個問題:輕薄筆記本通常只有 type-c 或者 usb-a 接口,沒有網(wǎng)口。但日常使用中是往往需要連接網(wǎng)口上網(wǎng)的,這時想到的第一個解決方案,就是去買一個轉(zhuǎn)接頭或者擴展塢。它們可以將 type-c 或者 usb-a 轉(zhuǎn)換為其他類型的接口供我們使用,實際上這就是一種適配器模式。

我們常用的充電頭,為什么叫電源適配器呢?傳統(tǒng)的供電是 220V 交流電,但是手機可能只需要 5V 的電壓進行充電,所以雖然現(xiàn)在有電,但是不能直接充。也不可能讓電力公司專門為我們提供一個 5V 的直流電使用,這時電源適配器就開始發(fā)揮作用了。比如蘋果的祖?zhèn)?5V1A 充電頭,實際上就是將 220V 交流電轉(zhuǎn)換為 5V 的直流電進行傳輸。這樣就相當于在 220V 交流電和手機之間,做了一個適配器的角色。

適配器模式分為類適配器對象適配器。

代碼實現(xiàn)

這里以電腦需要轉(zhuǎn)接器連接網(wǎng)線上網(wǎng)為例:

類適配器

1、定義電腦

/**
 * 電腦
 * <p>想上網(wǎng),需要插網(wǎng)線
 */
public class Computer {

    /**
     * 電腦需要連接上轉(zhuǎn)換器才可以上網(wǎng)
     *
     * @param adapter 轉(zhuǎn)接器
     */
    public void connect(NetToUsb adapter) {
        
        // 上網(wǎng)的具體實現(xiàn),找一個轉(zhuǎn)接頭
        adapter.connectNetLine();
    }
}

2、定義網(wǎng)線

/**
 * 網(wǎng)線
 */
public class NetLine {

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

3、定義 usb 轉(zhuǎn)網(wǎng)口轉(zhuǎn)接器

/**
 * 轉(zhuǎn)接器
 */
public interface NetToUsb {

    /**
     * 處理請求,usb -> 網(wǎng)線
     */
    void connectNetLine();
}

4、定義類適配器

/**
 * 類適配器
 */
public class ClassAdapter extends NetLine implements NetToUsb {

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

5、使用適配器連接網(wǎng)線上網(wǎng)

// 電腦
Computer computer = new Computer();
// 轉(zhuǎn)接器已經(jīng)插上網(wǎng)線
ClassAdapter adapter = new ClassAdapter();
// 電腦連接轉(zhuǎn)接器,成功上網(wǎng)
computer.connect(adapter);

這種實現(xiàn)方式需要占用一個繼承位。如果此時 NetToUsb 不是接口而是抽象類的話,由于 Java 不支持多繼承,就無法實現(xiàn)了。同時根據(jù)合成復用原則,應該更多的通過合成的方式去實現(xiàn)功能。

所以來看看第二種,也是用的比較多的一種模式:對象適配器

對象適配器

4、定義對象適配器

/**
 * 對象適配器
 */
public class ObjectAdapter implements NetToUsb {

    /**
     * 網(wǎng)線
     */
    private NetLine netLine;

    public ObjectAdapter(NetLine netLine) {
        this.netLine = netLine;
    }

    @Override
    public void connectNetLine() {
        // 可以上網(wǎng)了
        netLine.online();
    }
}

5、使用適配器連接網(wǎng)線上網(wǎng)

/**
 * 測試示例
 */
public class ObjectAdapterTest {

    @Test
    public void test() {
        // 電腦
        Computer computer = new Computer();
        // 網(wǎng)線
        NetLine netLine = new NetLine();
        // 轉(zhuǎn)接器插上網(wǎng)線
        ObjectAdapter adapter = new ObjectAdapter(netLine);
        // 電腦連接轉(zhuǎn)接器,成功上網(wǎng)
        computer.connect(adapter);
    }

}

這樣的方式不會占用繼承位,且滿足合成復用原則,耦合度更低,也更加靈活,推薦使用。

優(yōu)缺點

優(yōu)點

1、可以讓任何兩個沒有關(guān)聯(lián)的類一起運行。

2、提高了類的復用。

3、增加了類的透明度。

4、靈活性好。

缺點

1、過多地使用適配器,會讓系統(tǒng)非常零亂,不易整體進行把握。比如,明明看到調(diào)用的是 A 接口,其實內(nèi)部被適配成了 B 接口的實現(xiàn),一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統(tǒng)進行重構(gòu)。

2、由于 Java 至多繼承一個類,所以至多只能適配一個類,而且目標類必須是抽象類。

使用場景

有動機地修改一個正常運行的系統(tǒng)的接口,這時應該考慮使用適配器模式。

注意事項

適配器不是在詳細設(shè)計時添加的,而是解決正在服役的項目的問題。


參考

https://www.bilibili.com/video/BV1mc411h719?p=7&vd_source=299f4bc123b19e7d6f66fefd8f124a03文章來源地址http://www.zghlxwxcb.cn/news/detail-668338.html

到了這里,關(guān)于設(shè)計模式 06 適配器模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 設(shè)計模式四:適配器模式

    設(shè)計模式四:適配器模式

    1、適配器模式的理解 適配器模式可以理解為有兩個現(xiàn)成的類Adaptee和Target,它們兩個是不能動的,要求必須使用B這個類來實現(xiàn)一個功能,但是A的內(nèi)容是能復用的,這個時候我們需要編寫一個轉(zhuǎn)換器 適配器模式 Adaptee:被適配者,現(xiàn)有的接口或者類; Adapter:適配器類,適配器

    2024年02月22日
    瀏覽(24)
  • 設(shè)計模式-- 3.適配器模式

    設(shè)計模式-- 3.適配器模式

    將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 請求者(client):客戶端角色,需要使用適配器的對象,不需要關(guān)心適配器內(nèi)部的實現(xiàn),只對接目標角色。 目標角色(Target):目標角色,和client直接對接,定義

    2024年01月18日
    瀏覽(26)
  • 《設(shè)計模式》之適配器模式

    《設(shè)計模式》之適配器模式

    把一個類的接口轉(zhuǎn)換成客戶端所期待的另一種接口,從而使原接口不匹配而無法再一起工作的兩個類能在一起工作。 在軟件系統(tǒng)中,由于應用環(huán)境的變化,常常需要將“一些現(xiàn)存的對象”放在新的環(huán)境中應用,但是新環(huán)境要求的接口是這些現(xiàn)存對象所不能滿足的。 如何應對

    2024年02月09日
    瀏覽(22)
  • 適配器設(shè)計模式

    適配器設(shè)計模式

    一、適配器模式 B站:java架構(gòu)師 定義:適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作 三種適配器:類的適配器模式、對象的適配器模式、接口的適配器模式 1.類適配器模式 實現(xiàn)方式:讓

    2024年02月11日
    瀏覽(22)
  • 設(shè)計模式——適配器

    說起適配器,大家第一個想到的可能就是電源適配器。 電源適配器的作用想必同學們也都清楚,那就是將220伏高電壓轉(zhuǎn)換成想要的5伏至20伏左右穩(wěn)定的低電壓。 從某種程度上講,編程中經(jīng)常提起的適配器模式的原理與上面講到的基本是一致的。 用于將一個類的接口轉(zhuǎn)換成另

    2024年02月12日
    瀏覽(20)
  • 【設(shè)計模式】使用適配器模式做補償設(shè)計

    【設(shè)計模式】使用適配器模式做補償設(shè)計

    適配器模式是一種 結(jié)構(gòu)型設(shè)計模式 ,它提供了一個中間層,通過這個中間層,客戶端可以使用統(tǒng)一的接口與具有不同接口的類進行交互,也就是說,將一個接口轉(zhuǎn)換成客戶期望的另一個接口,使得原本不兼容的接口能夠協(xié)同工作。 舉個現(xiàn)實中的例子,我們現(xiàn)在的很多輕薄筆

    2024年02月22日
    瀏覽(24)
  • 【設(shè)計模式】適配器模式怎么理解?

    【設(shè)計模式】適配器模式怎么理解?

    什么是轉(zhuǎn)換器模式? 轉(zhuǎn)換器模式是一種結(jié)構(gòu)型設(shè)計模式, 主要用于在兩種不同類型的對象之間進行轉(zhuǎn)換,而不需要改變原型的實際邏輯。這是一種在軟件設(shè)計中經(jīng)常使用的模式 ,它有助于保持代碼的整潔和組織。在軟件開發(fā)中,我們經(jīng)常會遇到在不同層之間轉(zhuǎn)換對象的需求

    2024年01月25日
    瀏覽(21)
  • Java 設(shè)計模式——適配器模式

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

    (1)如果去歐洲國家去旅游的話,他們的插座如下圖最左邊,是歐洲標準。而我們使用的插頭如下圖最右邊的。因此我們的筆記本電腦,手機在當?shù)夭荒苤苯映潆?。所以就需要一個插座轉(zhuǎn)換器,轉(zhuǎn)換器第1面插入當?shù)氐牟遄?,?面供我們充電,這樣使得我們的插頭在當?shù)啬苁?/p>

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

    適配器設(shè)計模式(Adapter Design Pattern)是一種結(jié)構(gòu)型設(shè)計模式,用于 解決兩個不兼容接口之間的問題 。適配器允許 將一個類的接口轉(zhuǎn)換為客戶端期望的另一個接口,使得原本由于接口不兼容而不能一起工作的類可以一起工作。 在適配器設(shè)計模式中,主要包含以下四個角色:

    2024年02月19日
    瀏覽(16)
  • 設(shè)計模式之適配器模式筆記

    設(shè)計模式之適配器模式筆記

    記錄下學習設(shè)計模式-適配器模式的寫法。JDK使用版本為1.8版本。 意圖 :將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 結(jié)構(gòu) : 其中: Target定義Client使用的與特定領(lǐng)域相關(guān)的接口。 Client與符合Targ

    2024年02月10日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包