1. 程式人生 > >《Android源代碼設計模式解析與實戰》讀書筆記(二十)

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

apt 通過 rip idv ber list adaptee 無法 技術分享

第二十章、適配器模式

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

1.定義

適配器模式把一個類的接口變換成client所期待的還有一種接口,從而使原本因接口不匹配無法在一起工作的兩個類能夠在一起工作。

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接口的實現,一個系統假設太多出現這樣的情況,無異於一場災難。因此假設不是非常有必要,能夠不使用適配器,而是直接對系統進行重構。

7.參考

《JAVA與模式》之適配器模式

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