Android 设计模式之适配器模式

适配器模式的定义是:将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以作无间。看下以下两张图就更清楚了

适配器可以实现接口的解耦,如果过一段时间后,厂家想改变接口,适配器可以把改变的部分封装起来,用户就不需要跟着接口改变而改变,只要改变适配器就行了。

有这样一个需求:有一个鸭子类和一个火鸡类,我想用火鸡对象来冒充鸭子,但火鸡和鸭子的方法不完全一样,这时就需要一个转换器

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 设计模式》

时间: 2024-10-14 14:01:46

Android 设计模式之适配器模式的相关文章

Android设计模式系列-适配器模式

对于android开发者来说起,适配器模式简直太熟悉不过,有很多应用可以说是天天在直接或者间接的用到适配器模式,比如ListView.ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图).正是因为定义了这些适配器接口和适配器类,才能使我们的数据简单灵活而又正确的显示到了adapterview的实现类上.适配器模式,Adapter Pattern,勇敢的去适配,大量的资源

java/android 设计模式学习笔记(6)---适配器模式

这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我们的实际生活中也有很多类似于适配器的例子,比如香港的插座和大陆的插座就是两种格式的,为了能够成功适配,一般会在中间加上一个电源适配器,形如: 这样就能够将原来不符合的现有系统和目标系统通过适配器成功连接. 说到底,适配器模式是将原来不兼容的两个类融合在一起,它有点类似于粘合剂,将不同的东西通过一种转

Android设计模式--适配器模式--Adapter入门

今天,我们要梳理一下java设计模式的适配器模式. 适配器嘛,想一想我们平常用的电源适配器就知道了,就是把两个不兼容的东西搞通嘛,可以相互联系. 在java中也一样,就是让两个需要一起协调的类,通过适配器协调起来就行了,就是讲一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间.首先我们来看两个图,我们通常会有这样一个问题,厂商给我接口和我们现有接口对接不起来.旧的数据和新的数据接不起来等等. 解决这问题,在不改变原来两个接口的情况下,我们完全可以在写一个类,做个中间

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

悲剧面试题: 简单谈谈你对Android中的适配器模式: Adapter有哪些Adapter? 画出Adapter 的类图: 只有面试的时候才知道自己能力如何: 只有面试的时候才能更清晰的知识自己哪些不足: 既然不足那就补上. 适配器模式: 1.定义: 将一个接口转化为客户希望的另外一个接口: 2.目的: Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作了. 3.使用: 3.1.两个类所做的事情相同或者是相似,但具有不通的接口使用时,当双方都不易于修改的时候,使用适配器模式

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(9)---代理模式

这篇博客我们来介绍一下代理模式(Proxy Pattern),代理模式也成为委托模式,是一个非常重要的设计模式,不少设计模式也都会有代理模式的影子.代理在我们日常生活中也很常见,比如上网时连接的代理服务器地址,更比如我们平时租房子,将找房子的过程代理给中介等等,都是代理模式在日常生活中的使用例子. 代理模式中的代理对象能够连接任何事物:一个网络连接,一个占用很多内存的大对象,一个文件,或者是一些复制起来代价很高甚至根本不可能复制的一些资源.总之,代理是一个由客户端调用去访问幕后真正服务的包装对象

Java编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口.为取得此效果,需要在新类中嵌入一个现有类的private对象.但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public.如果成员对象自身都隐藏了具体实现,那么这种做法是安全的.当用户能够了

经常使用的android设计模式

一般来说,经常使用的android设计模式有下面8种:单例.工厂.观察者.代理.命令.适配器.合成.訪问者. 单例模式:目的是为了让系统中仅仅有一个调用对象,缺点是单例使其它程序过分依赖它,并且不同单例执行在不同进程中.使得维护困难: 工厂模式:生产固定的一些东西,如抽象类,缺点是产品改动麻烦:如喜欢动作片和爱情片的人分别向server发出同一个请求.就能够得到他们想看的影片集,相当于不同对象进行同一请求,需求均得到满足. 观察者模式:就是多个对象对一个对象进行监控,如缓存: 代理模式:自己的事

Android设计模式——单例模式(Singleton)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import