標籤: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原始碼設計模式解析與實戰》讀書筆記(二十)