自定义适配器模式:一类的接口,转换成客户的期望,也是一个接口。适配器使原本接口不是与类兼容可以无缝。下面两个图看起来更加清晰

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 设计模式模式适配器的更多相关文章

  1. 设计模式模式适配器(Adapter)摘录

    23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助建立一个系统,是独立于如何.这是一个这些对象和陈述的组合.创建使用继承一个类架构更改实例,一个对象类型模 ...

  2. Android设计模式(五岁以下儿童)--简单工厂模式

    1.面试的时候问这个问题: 在ListView 的item小程序.很多不同的显示风格.或者是,为了更好地维护,不同的样式,应该怎么做? 我一下就想到的是工厂的模式,利用project,编写ViewFa ...

  3. Android 设计模式之MVC模式

    说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...

  4. Android设计模式系列

    http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...

  5. 经常使用的android设计模式

    一般来说,经常使用的android设计模式有下面8种:单例.工厂.观察者.代理.命令.适配器.合成.訪问者.   单例模式:目的是为了让系统中仅仅有一个调用对象,缺点是单例使其它程序过分依赖它,并且不 ...

  6. Android MVP模式

    转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...

  7. android 启动模式介绍

    Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...

  8. Android 常用数据适配器SimpleAdapter

    在<Android 常用数据适配器ArrayAdapter>中介绍了ArrayAdapter数据适配器.但是存在一个缺陷,那就是条目的图标都固定相同,要显示每个条目的图标都不相同,那么使用 ...

  9. android夜间模式实现

    一.概述 android夜间模式实现分为两大类 重启activity的实现 不重启activity的实现 二.正文 1.重启activity实现夜间模式[在界面文件中的实现部分] 1.1在attrs. ...

随机推荐

  1. hdu 4039 The Social Network

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4039 题目分类:字符串+bfs 题意:给一个人际关系图,根据关系图,给一个人推荐一个人认识 题目分析: ...

  2. AdaBoost中利用Haar特征进行人脸识别算法分析与总结1——Haar特征与积分图

    原地址:http://blog.csdn.net/watkinsong/article/details/7631241 目前因为做人脸识别的一个小项目,用到了AdaBoost的人脸识别算法,因为在网上 ...

  3. [Android学习笔记]继承自ViewGroup的控件的过程学习

    ViewGroup文档 http://developer.android.com/training/index.html 继承自ViewGroup需要重写onLayout方法用来为子View设定位置信 ...

  4. java学习笔记05--字符串 .

    java学习笔记05--字符串 . 一.String类 由字符所组成的一串文字符号被称之为字符串.在java中字符串不仅仅是字符数组,而且是String类的一个实例,可以使用String类来构建. 字 ...

  5. SilkTest高级进阶系列8 – 放下榔头,立地成佛

    在地球尚未毁灭的某天,手动测试的同事找到你所在的自动组,问是否可以帮助他们自动化一个需要连续添加100个条目的测试用例,因为他们觉得这是一个噩梦.你口头上说要先烟酒烟酒才能知道,但是内里早就满心欢喜: ...

  6. JavaScript 中的事件类型3(读书笔记思维导图)

    Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件. UI(User Interface,用户界面)事件:当用户与页面上的元素交 ...

  7. Exception in thread &quot;main&quot; java.lang.IllegalArgumentException

    1.错误叙述性说明 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format giv ...

  8. hdu5171(矩阵快速幂)

    传送门:GTY's birthday gift 题意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法 ...

  9. 绝杀600元以下智能手机的夏新小V二代-专栏-速途网

    绝杀600元以下智能手机的夏新小V二代-专栏-速途网 绝杀600元以下智能手机的夏新小V二代

  10. HTML表格标签的使用-&lt;table&gt;

    <html> <head> <title> 表格标签 </title> <!-- 标签名:table 定义一个表格 子标签:<caption ...