編輯:關於android開發
適配器模式是結構型設計模式之一,它在我們的開發中使用率極高,比如ListView、GridView以及RecyclerView都需要使用Adapter。
適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配無法在一起工作的兩個類可以在一起工作。
(1)系統需要使用現有的類,但此類的接口不符合系統的需要,即接口不兼容。
(2)想要建立一個可以重復使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
(3)需要一個統一的輸出接口,而輸入端的類型不可預知。
適配器模式分為兩種,即類適配器模式與對象適配器模式。以下是類適配器的UML圖。
(1)Target
:目標角色,也就是所期待得到的接口。注意:由於這裡討論的是類適配器模式,因此目標不可以是類。
(2)Adaptee
:現在需要適配的接口。
(3)Adapter
:適配器角色,也就是本模式的核心。適配器把源接口轉換成目標接口。顯然,這一角色不可以是接口,而必須是具體類。
以筆記本電源適配器為例,電源適配器將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中,使用組合的形式實現接口兼容的效果。這比類適配器方式更為靈活,同時被適配對象的方法不會暴露出來。因此對象適配器模式更加靈活、實用。
這裡ListView的Adapter就是使用的對象適配器模式,Target就是View,Adapter角色就是將Item View輸出為View抽象的角色,Adaptee就是需要被處理的Item View。
(1)更好的復用性:系統需要使用現有的類,而此類的接口不符合系統的需要。那麼通過適配器模式就可以讓這些功能得到更好的復用。
(2)更好的擴展性:在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。
過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是A接口,其實內部被適配成了B接口的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構!
讓服務器iis支持.apk文件下載的設置方法,iis.apk隨著智能手機的普及,越來越多的人使用手機上網,很多網站也應手機上網的需要推出了網站客戶端,.apk文件就是安卓
android 實現漫天飛舞雪花以及下雨天的效果 前言: 這個效果實現的原作者是國外一位大神。我在其基礎上測試,以及在代碼上加了不少注釋,以及局部修改。後面我有根據漫
Android學習筆記①——安卓工具的基本安裝,android安卓 安卓已經出來很長時間了,網上的教程也有很多,怕以後忘記,就把網上大牛們的分享的知識自己在學習一下
GridView的簡單使用, 測試代碼: activity_main.xml: <RelativeLayout xmlns:android=http