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

來源:互聯網
上載者:User

標籤:android   get   split   適配器模式   nes   結構型   ddc   adapter   androi   

第二十章、適配器模式

適配器模式是結構型設計模式之中的一個,它在我們的開發中使用率極高,比方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原始碼設計模式解析與實戰》讀書筆記(二十)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.