Android设计模式(十四)--适配器模式

悲剧面试题:

简单谈谈你对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)进行兼容修饰;也是一种缺省的适配器模式;

时间: 2024-12-30 00:07:38

Android设计模式(十四)--适配器模式的相关文章

处女男学Android(十四)---Android 重量级数据存储之SQLite

前言 不知不觉的Android基础系列已经写了十三篇了,这是第十四篇~上一篇blog记录了Android中的一种数据存储方案,即共享参数(Sharedpreferences)的使用(处女男学Android(十三)---Android 轻量级数据存储之SharedPreferences).最近初学如何在Android中应用SQLite,写了一个基于ListView的增删查的小例子,本篇blog就记录一下我学习到的如何在Android中操作SQLite持久化客户端数据. 初始化SQLite 关于SQ

Android入门(十四)内容提供器-实现跨程序共享实例

原文链接:http://www.orlion.ga/661/ 打开SQLite博文中创建的 DatabaseDemo项目,首先将 MyDatabaseHelper中使用 Toast弹出创建数据库成功的提示去除掉,因为跨程序访问时我们不能直接使用 Toast.然后添加一个 DatabaseProvider类,代码如下所示: package ga.orlion.databasedemo; import android.content.ContentProvider; import android.c

android学习十四(android的接收短信)

收发短信是每个手机基本的操作,android手机当然也可以接收短信了.android系统提供了一系列的API,使得我们可以在自己的应用程序里接收和发送短信. 其实接收短信主要是利用我们前面学过的广播机制.当手机接收到一条短信的时候,系统会发出一条值为andorid.provider.Telephony.SMS_RECEIVED的广播,这条广播里携带着与短信相关的所有数据.每个应用程序都可以在广播接收器里对它进行监听,收到广播时在从中解析出短信的内容即可. 下面我们来个具体的例子实践下吧,新建一个

android 学习十四 探索安全性和权限

1.部署安全性:应用程序必须使用数字证书才能安装到设备上. 2.执行期间的安全性: 2.1 使用独立进程 2.2 使用固定唯一用户ID 2.3  申明性权限模型 3数字证书 3.1.数字证书的用处:使用数字证书对应用进行签名后,防止应用程序被非法更新(只有相同的数字证书才能更新应用) 3.2.数字证书:包含相关信息(如:公司名称和地址等)的工件. 重要特性包括(签名和公/私钥). 3.3.数字证书的获取:a.从证书授权机构购买 b.使用keytool等工具生成. 3.4数字证书的存储:存储在密钥

设计模式(十四)单例模式

懒汉,线程不安全 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 懒汉,线程安全 public class Singleton { private st

Android 第十四课——Handler Looper Message

1.基础概念 1)android.os.Handler 2)主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 3)应用程序一旦启动,Android UI 这个主线程的生命周期就开始了,然而,Android UI 线程并不是线程安全的,也就是说,更新UI只能在主线程中同步更新,子线程中异步操作是危险的.所以,项目中如果我们直接new Thread 内部去更改Android UI,往往会报错误如下: java.lang.RuntimeException: Can't create hand

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu.Slider 和 Button.并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一个链接列表,一个堆栈以及队列. 例子1:电视遥控器的频道遍历 2.问题 如何操纵任意的对象集合? 如一个列表(Lis

Android第十四期 - 可扩展选项卡

代码已经整理好了,修复了下面区域不显示的BUG,如图:

Android第二十四期 - 游戏公告跑马灯效果

代码已经整理好,效果如下: 地址:http://down.51cto.com/data/1887395

《Android源码设计模式解析与实战》读书笔记(十四)

第十四章.迭代器模式 迭代器模式,又叫做游标模式,是行为型设计模式之一.我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法,让使用容器的人自己去实现去吧.这两种情况好像都能够解决问题. 然而在前一种情况,容器承受了过多的功能,它不仅要负责自己"容器"内的元素维护(添加.删除等等),而且还要提供遍历自身的接口:而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历.第二种方式倒是省事,却又将容器的内部细节暴露无遗. 正因于此,迭代器