標籤:android 設計模式 listview
悲劇面試題:
簡單談談你對Android中的適配器模式;
Adapter有哪些Adapter?
畫出Adapter 的類圖;
只有面試的時候才知道自己能力如何;
只有面試的時候才能更清晰的知識自己哪些不足;
既然不足那就補上。
適配器模式:
1、定義:
將一個介面轉化為客戶希望的另外一個介面;
2、目的:
Adapter模式使得原本由於介面不相容而不能一起工作的類可以一起工作了。
3、使用:
3.1、兩個類所做的事情相同或者是相似,但具有不通的介面使用時,當雙方都不易於修改的時候,使用適配器模式;
3.2、系統已經擁有的類,但是不符合需要;
3.3、彼此沒有特別的關聯的類需要共同完成操作;
4、分類:
4.1、類適配器;
4.2、對象適配器;
在java 中類適配器的本質,就是使用的繼承與多態;
類適配器用與單一的資料來源,是由於java 的單繼承模式造成的
對象適配器可以適配多個資料來源,彌補類適配器的不足;但是需要避免資料來源過多時造成的分支過多,結構不清晰的問題;
5、優點:
5.1、複用性好:對於已有的類在不改變原有的結構情況下,更好的複用;
5.2、拓展性:適配器中可以更好的拓展;
6、缺點:
造成系統邏輯混亂,適配器模式在某種情況下說,是不得不使用的情況下才會使用;否則若是設計好的介面就不需要適配了!
7、描述對象適配器:
目標介面:
package com.example.demo.Adapter;/** * 目標介面 * @author qubian * @data 2015年6月19日 * @email [email protected] * */public interface Target {public void function1();public void function2();}
已經存在的資料類:
這個如果是抽象類別,並且繼承Target就算是一種預設的適配器模式
package com.example.demo.Adapter;/** * 已經存在的類 * @author qubian * @data 2015年6月19日 * @email [email protected] * */public class BaseAdapter {public void function1(){}}
適配器:
package com.example.demo.Adapter;/** * 適配器 * @author qubian * @data 2015年6月19日 * @email [email protected] * */public class Adapter extends BaseAdapter implements Target{@Overridepublic void function2() {}}
8、對象適配器:
目標對象:
package com.example.demo.Adapter.ObjAdapter;/** * 目標對象 * @author qubian * @data 2015年6月19日 * @email [email protected] * */public class Obj {public void function1(){}public void function2(){}}package com.example.demo.Adapter.ObjAdapter;/** * 目標對象 * @author qubian * @data 2015年6月19日 * @email [email protected] * */public class Obj2 {public void function3(){}public void function4(){}}適配器:
package com.example.demo.Adapter.ObjAdapter;public class Adapter {private Obj obj;private Obj2 obj2;public Adapter(Obj obj){this.obj=obj;}public void setObj2(Obj2 obj2) {this.obj2 = obj2;}public void function1(){this.obj.function1();}public void function3(){if (this.obj2!=null) {this.obj2.function3();}}}
9、Android中的適配器:
在Android 中,我們所用到的ListView ,書寫自己的Adapter,來適配視圖,就是一種適配器模式。
抽象類別BaseAdapter 實現了 ListAdapter 和 SpinnerAdapter 兩個介面,這兩個介面都繼承自 Adapter 介面。
Adapter 的類圖:
簡單的說:我們寫的適配器(MyListAdapter) 就是正對目標介面(BaseAdpter)對資料來源(ListView)進行相容修飾;也是一種預設的適配器模式;
Android設計模式(十四)--適配器模式