適配器模式

Android進(jìn)階之設(shè)計(jì)模式

適配器模式

定義: 把一個(gè)類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個(gè)類能夠在一起工作.

使用場(chǎng)景:

  1. 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要,即接口不兼容.
  2. 想要建立一個(gè)可以重復(fù)使用的類,用于與彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進(jìn)的類一起工作.
  3. 需要一個(gè)統(tǒng)一的輸出接口,而輸入端的類型不可預(yù)知.

優(yōu)點(diǎn):

  1. 更好的復(fù)用性,系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要,那么通過適配器模式就可以讓這些功能得到更好的復(fù)用.
  2. 更好的擴(kuò)展,在實(shí)現(xiàn)適配器功能的時(shí)候,可以調(diào)用自己開發(fā)的功能,從而自然地?cái)U(kuò)展系統(tǒng)的功能.

缺點(diǎn):
過多地使用適配器,會(huì)讓系統(tǒng)非常零亂,不易整體把握.

適配器模式分為兩種,類適配器模式和對(duì)象適配器模式

例子: 假如我們的筆記本電腦需要充電,用的是 5V 的電壓,但是我們正常的電壓是 220V .所以現(xiàn)在出現(xiàn)了不兼容,這就需要一個(gè) adapter 層,來把 220V 的電壓 轉(zhuǎn)換為 5V 的.

  • 類適配器模式:

具體實(shí)現(xiàn):

//Target 角色
public interface FiveVolt {
    public int getVolt5();
}

//需要被轉(zhuǎn)換的對(duì)象
public class Volt220 {

    public int getVolt220(){
        return 220;
    }
}

//adapter 將220V 電壓轉(zhuǎn)換為 5V 電壓
public class VoltAdapter extends Volt220 implements FiveVolt{
    @Override
    public int getVolt5() {
        //實(shí)際上這個(gè)位置需要把拿到的220V經(jīng)過一系列轉(zhuǎn)化,轉(zhuǎn)換成 5V
        return 5;
    }
}

客戶端使用:

 public static void main(String[] args) {
 
        VoltAdapter voltAdapter = new VoltAdapter();
        System.out.println("輸出電壓 : "+ voltAdapter.getVolt5());
}
  • 對(duì)象適配器模式

與類的適配器模式一樣,對(duì)象的適配器模式把被適配的類的 API 轉(zhuǎn)換成目標(biāo)類的 API ,與類的適配器模式不同的是,對(duì)象的適配器模式不是使用繼承關(guān)系連接到 Adaptee 類,而是使用代理關(guān)系連接到 Adaptee 類.

//Target 角色
public interface FiveVolt {
    public int getVolt5();
}


//需要被轉(zhuǎn)換的對(duì)象
public class Volt220 {

    public int getVolt220(){
        return 220;
    }
}


//區(qū)別
public class VoltAdapter2 implements FiveVolt{
    Volt220 volt220;

    public VoltAdapter2(Volt220 volt220) {
        this.volt220 = volt220;
    }

    public int getVolt220(){
        return volt220.getVolt220();
    }

    @Override
    public int getVolt5() {
        return 5;
    }
}

這種方式的好處是 被適配對(duì)象中的方法不會(huì)暴露出來,而類適配器由于繼承了被適配對(duì)象,因此,被適配對(duì)象類的函數(shù)在 Adapter 類中也都含有,這樣使得 Adapter 類出現(xiàn)一些奇怪的接口,用戶使用成本較高,所以,對(duì)象適配器模式更加靈活,實(shí)用.

我們?cè)陂_發(fā)中,肯定也經(jīng)常接觸,ListView ,RecyclerView,都會(huì)用到 Adapter ,這個(gè) Adapter 的作用就是把各式各樣的list的數(shù)據(jù),轉(zhuǎn)化為你想要的View 的形式.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容