編輯:關於Android編程
適配器模式是結構型設計模式之一,它在我們的開發中使用率極高,比如ListView、GridView以及RecyclerView都需要使用Adapter。
適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配無法在一起工作的兩個類可以在一起工作。
(1)系統需要使用現有的類,但此類的接口不符合系統的需要,即接口不兼容。
(2)想要建立一個可以重復使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
(3)需要一個統一的輸出接口,而輸入端的類型不可預知。
適配器模式分為兩種,即類適配器模式與對象適配器模式。以下是類適配器的UML圖。
(1)Target
:目標角色,也就是所期待得到的接口。注意:由於這裡討論的是類適配器模式,因此目標不可以是類。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPqOoMqOpPGNvZGU+QWRhcHRlZTwvY29kZT6jus/W1NrQ6NKqysrF5LXEvdO/2qGjPC9wPg0KPHA+o6gzo6k8Y29kZT5BZGFwdGVyPC9jb2RlPqO6ysrF5Mb3vcfJq6Os0rK+zcrHsb7Eo8q9tcS6y9DEoaPKysXkxvew0dS0vdO/2tequ7uzycS/seq907/aoaPP1Mi7o6zV4tK7vcfJq7K7v8nS1MrHvdO/2qOstvix2NDryse+38zlwOChozwvcD4NCjxoMiBpZD0="4簡單實現">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中,使用組合的形式實現接口兼容的效果。這比類適配器方式更為靈活,同時被適配對象的方法不會暴露出來。因此對象適配器模式更加靈活、實用。
這裡ListView的Adapter就是使用的對象適配器模式,Target就是View,Adapter角色就是將Item View輸出為View抽象的角色,Adaptee就是需要被處理的Item View。
(1)更好的復用性:系統需要使用現有的類,而此類的接口不符合系統的需要。那麼通過適配器模式就可以讓這些功能得到更好的復用。
(2)更好的擴展性:在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。
過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是A接口,其實內部被適配成了B接口的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構!
簡介本文介紹一個Android手勢密碼開源庫的使用及實現的詳細過程,該開源庫主要實現以下幾個功能: 支持手勢密碼的繪制,並支持密碼保存功能,解鎖時自動比對密碼給出結果
最近由於項目太大了,導致編譯通不過(Android對一個應用中的方法個數貌似有限制),所以一直琢磨著能否將某些模塊的APK不用安裝,動態加載,通過在網上查找
一、通訊錄介紹 通訊錄是Android手機自帶的一個應用,它是一個ContentProvider應用,其它應用可以對通訊錄進行訪問,進行對聯系人的CRUD操作。 二、
為什麼要用異步任務?在android中只有在主線程才能對ui進行更新操作,而其它線程不能直接對ui進行操作android本身是一個多線程的操作系統,我們不能把所有的操作都