Android 设计模式模式适配器
自定义适配器模式:一类的接口,转换成客户的期望,也是一个接口。适配器使原本接口不是与类兼容可以无缝。下面两个图看起来更加清晰
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVuZzB6aGFvdGFp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
适配器能够实现接口的解耦。假设过一段时间后。厂家想改变接口。适配器能够把改变的部分封装起来,用户就不须要跟着接口改变而改变。仅仅要改变适配器即可了。
有这样一个需求:有一个鸭子类和一个火鸡类。我想用火鸡对象来冒充鸭子,但火鸡和鸭子的方法不全然一样。这时就须要一个转换器
Duck.java鸭子接口
package com.dzt.adapter; public interface Duck { public void quack(); public void fly();
}
Turkey.java火鸡接口
package com.dzt.adapter; public interface Turkey { public void gobble(); public void fly();
}
实现一个鸭子类MallardDuck.java
package com.dzt.adapter; public class MallardDuck implements Duck { @Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("MallardDuck------------------>quack");
} @Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("MallardDuck------------------>fly");
} }
实现一个火鸡类WildTurkey.java
package com.dzt.adapter; public class WildTurkey implements Turkey { @Override
public void gobble() {
// TODO Auto-generated method stub
System.out.println("WildTurkey------------------>gobble");
} @Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("WildTurkey------------------>fly");
} }
要想把火鸡转成一个鸭子就要创建一个适配器TurkeyAdapter.java
package com.dzt.adapter; /**
* 能够把火鸡转化成鸭子
*
* @author Administrator
*
*/
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
} @Override
public void quack() {
// TODO Auto-generated method stub
turkey.gobble();
} @Override
public void fly() {
// TODO Auto-generated method stub
for (int i = 0; i < 5; i++)
turkey.fly();
} }
因为是要把火鸡转成鸭子。所以须要实现鸭子接口。和鸭子实现类有同样的方法,传入须要适配的对象(火鸡)
測试代码
package com.dzt.adapter; /**
* 使用适配器模式 需求:因为找不到合适的鸭子。仅仅能临时到火鸡来取代鸭子,但鸭子和火鸡的方法不一样。此时就须要用一个”中间人“进行转换。 *
* @author Administrator
* @data 2014.08.19
*/
public class AdapterModel1 { public static void main(String[] args) {
WildTurkey wildTurkey = new WildTurkey();
MallardDuck mallardDuck = new MallardDuck(); Duck adapter = new TurkeyAdapter(wildTurkey);
System.out.println("turkey say..................");
wildTurkey.gobble();
wildTurkey.fly();
System.out.println("duck say..................");
mallardDuck.quack();
mallardDuck.fly();
System.out.println("adapter say..................");
adapter.quack();
adapter.fly();
System.out.println("-------------------------------------------------");
}
}
这样在适配器就能使用鸭子类中的方法,这个模式能够减少客户与系统之间的耦合,更利于程序的可维护性
相关代码:http://download.csdn.net/detail/deng0zhaotai/7835473
参考书:《Head First 设计模式》
版权声明:本文博主原创文章,博客,未经同意不得转载。
Android 设计模式模式适配器的更多相关文章
- 设计模式模式适配器(Adapter)摘录
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助建立一个系统,是独立于如何.这是一个这些对象和陈述的组合.创建使用继承一个类架构更改实例,一个对象类型模 ...
- Android设计模式(五岁以下儿童)--简单工厂模式
1.面试的时候问这个问题: 在ListView 的item小程序.很多不同的显示风格.或者是,为了更好地维护,不同的样式,应该怎么做? 我一下就想到的是工厂的模式,利用project,编写ViewFa ...
- Android 设计模式之MVC模式
说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...
- Android设计模式系列
http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...
- 经常使用的android设计模式
一般来说,经常使用的android设计模式有下面8种:单例.工厂.观察者.代理.命令.适配器.合成.訪问者. 单例模式:目的是为了让系统中仅仅有一个调用对象,缺点是单例使其它程序过分依赖它,并且不 ...
- Android MVP模式
转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...
- android 启动模式介绍
Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...
- Android 常用数据适配器SimpleAdapter
在<Android 常用数据适配器ArrayAdapter>中介绍了ArrayAdapter数据适配器.但是存在一个缺陷,那就是条目的图标都固定相同,要显示每个条目的图标都不相同,那么使用 ...
- android夜间模式实现
一.概述 android夜间模式实现分为两大类 重启activity的实现 不重启activity的实现 二.正文 1.重启activity实现夜间模式[在界面文件中的实现部分] 1.1在attrs. ...
随机推荐
- 积累的VC编程小技巧之组合框
1.如何正确的得到ComBox的指针 CComboBox *mComb = (CComboBox*)GetDlgItem(IDC_DuanCB); CComboBox *mComb = (CCombo ...
- How-To: add EPEL repository to Centos 6.x is Easy!
How-To: add EPEL repository to Centos 6.x is Easy! | ITek Blog How-To: add EPEL repository to Centos ...
- copy算法
copy------强化效率无所不用其极 copy(first,last,result)算法可将输入区间[first,last)内的元素拷贝到输出区间[result,result+(last-f ...
- poj 1220 NUMBER BASE CONVERSION(短除法进制转换)
题目连接:1220 NUMBER BASE CONVERSION 题目大意:给出两个进制oldBase 和newBase, 以及以oldBase进制存在的数.要求将这个oldBase进制的数转换成ne ...
- 利用linux BT5来破解无线 破解无线
下面是自己整理的详细步骤,版权小冯全部. 一.提前准备好bt5的ISO镜像文件.和虚拟机,提前把虚拟机安装好.然后进行安装bt5. 二.进入页面,点击statx.进入可视化界面. 三.进入主界面后.下 ...
- 修改emlog后台登录路径的方法(转)
emlog后台登录地址的目录名称默认为admin,并且官方没有提供自定义后台登录入口名字的功能,这多少让我们觉得有些不安全,毕竟暴露一个网站的后台不是一件安全的事,今天就给您说下修改方法,增加一下网站 ...
- 诺贝尔物理学奖公布:LED灯将点亮了整个21世纪
很多其它精彩.破晓博客:点击打开链接 7日.在瑞典首都斯德哥尔摩,瑞典皇家科学院常任秘书诺尔马克(左二)宣布2014年诺贝尔物理学奖得主.新华社发 ■人物 中村修二 勇于追讨酬劳的科学家 被誉为&qu ...
- hdu3485(递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3485 分析: a[i]表示长度为i,第i位为0的,符合情况的个数. b[i]表示长度为i,第i位为1的 ...
- QT怎样在QTableWidge显示图片
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">QTableWi ...
- 32位Linux文件限制大小
线上程序不断重新启动,查看log发现是进程由于SIGXFSZ信号退出.对过大的文件进行操作的时候会产生此信号,一般仅仅在32位机器上出现,文件限制大小为2G.用lsof查看进程打开的文件,果然有一个文 ...