Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 《Android源碼設計模式解析與實戰》讀書筆記(二十)

《Android源碼設計模式解析與實戰》讀書筆記(二十)

編輯:關於android開發

《Android源碼設計模式解析與實戰》讀書筆記(二十)


第二十章、適配器模式

適配器模式是結構型設計模式之一,它在我們的開發中使用率極高,比如ListView、GridView以及RecyclerView都需要使用Adapter。

1.定義

適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配無法在一起工作的兩個類可以在一起工作。

2.使用場景

(1)系統需要使用現有的類,但此類的接口不符合系統的需要,即接口不兼容。

(2)想要建立一個可以重復使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。

(3)需要一個統一的輸出接口,而輸入端的類型不可預知。

3.UML類圖

適配器模式分為兩種,即類適配器模式與對象適配器模式。以下是類適配器的UML圖。

這裡寫圖片描述

(1)Target:目標角色,也就是所期待得到的接口。注意:由於這裡討論的是類適配器模式,因此目標不可以是類。

(2)Adaptee:現在需要適配的接口。

(3)Adapter:適配器角色,也就是本模式的核心。適配器把源接口轉換成目標接口。顯然,這一角色不可以是接口,而必須是具體類。

4.簡單實現

以筆記本電源適配器為例,電源適配器將220V的電壓轉換到5V。那麼5V電壓就是Target接口,220V電壓就是Adaptee類,轉換就是Adapter。

(1)以類適配器模式實現

//Target角色
public interface FiveVolt {

    public int getVolt5();
}
//Adapter角色
public class Volt220 {
    public int getVolt220(){
        return 220;
    }
}
public class VoltAdapter extends Volt220 implements FiveVolt{

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

}
public class Test {

    public static void main(String[] args) {
        VoltAdapter adapter = new VoltAdapter();
        System.out.println("輸出電壓:" + adapter.getVolt5());
    }

}

結果:

輸出電壓:5

(2)對象適配器模式實現

對象適配器模式與類適配器模式不同的是,對象適配器模式不是使用繼承關系連接到Adapter類,而是使用代理關系連接到Adapter類。

所以FiveVolt 、Volt220 不變,VoltAdapter 修改如下:

public class VoltAdapter1 implements FiveVolt{

    Volt220 mVolt220;

    public VoltAdapter1(Volt220 adaptee) {
        this.mVolt220 = adaptee;
    }

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

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

}

Test修改為:

public class Test {

    public static void main(String[] args) {
        VoltAdapter adapter = new VoltAdapter(new Volt220());
        System.out.println("輸出電壓:" + adapter.getVolt5());
    }

}

這種實現方式直接將要適配的對象傳遞到Adapter中,使用組合的形式實現接口兼容的效果。這比類適配器方式更為靈活,同時被適配對象的方法不會暴露出來。因此對象適配器模式更加靈活、實用。

5.Android源碼中的適配器模式

1.ListView的Adapter

這裡ListView的Adapter就是使用的對象適配器模式,Target就是View,Adapter角色就是將Item View輸出為View抽象的角色,Adaptee就是需要被處理的Item View。

6.總結

1.優點

(1)更好的復用性:系統需要使用現有的類,而此類的接口不符合系統的需要。那麼通過適配器模式就可以讓這些功能得到更好的復用。

(2)更好的擴展性:在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。

2.缺點

過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是A接口,其實內部被適配成了B接口的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構!

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved