悲剧面试题:
简单谈谈你对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{ @Override public 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)进行兼容修饰;也是一种缺省的适配器模式;