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

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. [置顶] 页面缓存,cache,设置缓存过期时间,OutputCache

    页面缓存 方法一: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //缓存有数据 if (Cach ...

  2. 中科燕园GIS外包----机场project地理信息系统EGIS

    对于大型机场建设project,不管project建设过程中.还是project建设完毕后.进入执行和维护阶段.必然要产生和使用到大量的各式各样的信息资料,包含project项目过程管理控制类文档,p ...

  3. SICP 习题 (2.6) 解题总结:丘奇计数

    SICP 习题 2.6 讲的是丘奇计数,是习题2.4 和 2.5的延续. 这里大师们想提醒我们思考的是"数"究竟是什么,在计算机系统里能够怎样实现"数".准备好 ...

  4. Android 增量更新实例(Smart App Updates)

    原地址:http://my.oschina.net/liucundong/blog/160436 官方说明 实现原理 实现 (1)生成差异包 (2)使用旧apk+差异包,在客户端合成新apk 注意事项 ...

  5. [Cocos2d-x]节点的尺寸大小

    作为一个CCNode,本身没有大小而言,但是AddChild之后,便有了尺寸的概念. Cocos2d-x中对于一个节点的尺寸可以通过以下三个方法获取: CCSprite: getContentSize ...

  6. android水平循环滚动控件

    CycleScrollView.java package com.example.test; import android.content.Context; import android.graphi ...

  7. VSTO学习笔记(七)基于WPF的Excel分析、转换小程序

    原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然 ...

  8. graphterm 0.40.1 : Python Package Index

    graphterm 0.40.1 : Python Package Index graphterm 0.40.1 Downloads ↓ A Graphical Terminal Interface ...

  9. Visual Studio Installer打包后生成的安装文件每次执行都需要重新安装C++ 2010运行库(x86)的解决方案

    原文:Visual Studio Installer打包后生成的安装文件每次执行都需要重新安装C++ 2010运行库(x86)的解决方案 如果你是用Visual Studio自带的打包项目打包了一个I ...

  10. CF 460C Present 【DP+】主意

    给你n高树花.m日,每天连续浇筑w鲜花.一天一次,花长1高度单位 求m天后.最矮的花最高是多少 最大最小问题能够用二分来解 首先我们能够得到全部花的最矮高度即答案的下界,给这个花浇m天即是答案的上界 ...