5.适配器模式(Adapter pattern)
适配器模式我个人也接触得比较多,在android里面使用的比较多的模式是,为list提供adapter,然后android中规定了baseadapter(这是一个抽象类),故若要写自己的adper,所以就要继承这个类,从这一点也可以看出有时候类比接口好,呵呵,在书中我们提到了一个问题,当遇到我们不能修改我们要使用的类的时候,我们应该怎么做来使用它的接口呢
???这时候就需要适配器模式,就是将你的接口转化成他所要求的接口
在书上的例子还用到了代理哦
书上是这样写的
class FilterAdapter implements Processor{
Filter filter;
public FilterAdapter(Filter filter){
this.filter=filter;
}
public String name(){return filter.name();}
//其他方法也是如上返回fliter的一下方法这样,这里很明显就用到了代理,通过构造一个filter对象,然后通过方法进行对他的接口进行包装
}
filter使我们的接口,而proccecr是他们要求的接口,当我们使用他们的接口的时候,我们就可以这样用
apply.process(new FilterAdapter(new filter()));
这就是适配器模式,这样使代码更加复用性哦
注:java 适配器模式详解http://www.iteye.com/topic/1109876
Adapter pattern
问题引出:大家生活中可能碰到的一个问题就是你新买的手机自带的耳机是2.5接口的,不幸的是有一天你的耳机坏了,你去市面上根本就找不到2.5的耳机了,基本上是3.5接口了,没办法你只好买了个3.5接口的耳机,老板告诉你:“我给你一个适配器”这不问题就解决了。
问题分析:3.5的接口的耳机在你手机上本来是没法使用的,因为它没有按照2.5接口的设计啊,而现在我又想使用这幅耳机,于是乎有了“适配器(Adapter)”这个一个东西出来了。
Adapter模式的定义:把一个类的接口变换成客户端所期待的另外一种接口,使得原本由于接口不兼容而不能再一起工作的那些类可以一起工作。
适配器模式分类:1.类的适配器模式(采用继承实现)2.对象适配器(采用对象组合方式实现)
类的适配器类图:
模式的构成:以问题中例子为模型
目标抽象角色(Target):定义客户所期待要使用的接口,我们把手机当做客户端,客户端所需要使用的耳机的接口是2.5的,在这里就可以抽象出来一个2.5接口的设备(并不一定是耳机)。
源角色(Adaptee):需要被适配的接口,在这里指的是我们从市场上买回来的那个3.5接口的耳机。
适配器角色(Adapter):用来把源接口转换成符合要求的目标接口的设备,在这里指的是老板送给我们的那个“转换器”。
客户端(Client):这里指的就是那个给我们带来麻烦的手机喽。
示例代码:
-
-
- package pattern.adapter;
-
- public interface Target {
-
- public void provide2_5();
-
- }
-
-
-
- package pattern.adapter;
-
- public class Adaptee {
-
- public void provide3_5(){
-
- System.out.println("我是一个3.5的接口哦");
-
- }
-
- }
-
-
-
- package pattern.adapter;
-
- public class Adapter extends Adaptee implements Target {
-
- @Override
-
- public void provide2_5() {
-
- this.provide3_5();
-
- }
-
- }
-
-
-
- package pattern.adapter;
-
- public class CellPhoneClient {
-
- public static void main(String[] args) {
-
- Target target = new Adapter();
-
-
-
- target.provide2_5();
-
- }
-
- }
输出结果
:我是一个3.5的接口哦
从输出结果可以看出只支持2.5接口的手机成功的使用3.5的耳机了。这就是适配器模式的作用。
对象的适配器模式:
对象的适配器模式的不同之处在于Adapter角色封装了Adaptee角色,而不像类的适配器模式所采取的继承方式。其原理基本上是相似的。
应用适配器模式的场景:
1.系统需要使用现有的类,而现有类不符合当前系统的要求。如问题的提出。
2.系统要建立一个可以重复使用的类,用来与彼此没有太大关联的类或者在将来要引用的类一起工作。在Junit中有使用适配器模式的情景。
在TestCase的runBare方法中发现
该方法采用了两种模式,模板方法模式(不在本讨论范围)和适配器模式,其中runTest()方法其实 对应的就是我们用户(程序员)所编写的测试方法
在runTest方法中通过反射最终调用我们所编写的测试方法。我们可从宏观上来分析改代码,junit作为一个框架,他是没法知道我们要写些什么样的测试方法的,也是就是说他没法在runbare方法中直接调用我们所写的测试方法,他就采用适配器模式这样的一个方式来实现。Junit框架本身没法直接调用客户端所写的测试类,但他可以直接调用他本身拥有的类TestCase,这里的TestCase就相当于Adapter了,自己所写了测试类相当于Adaptee角色。
缺省的适配器模式(Default Adapter):缺省的适配器模式为一个接口提供缺省的实现,子类可以从这个缺省的实现类进行扩展,而不必而原有的接口进行扩展。相信大家在学习Swing时“AWT中事件的处理”有所接触。他的好处在于客户端不需要去实现与他无关的方法,只做他最关心的事。
分享到:
相关推荐
在阅读文章《设计模式——适配器模式(adapter)》时,你可以期待了解到更多关于适配器模式的实战案例、优缺点分析以及如何在实际项目中有效利用这一模式来解决问题。同时,提供的`adapter`压缩包文件可能包含示例...
七个结构型模式 七个结构型模式 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(一) 不兼容结构的协调——适配器模式(二) 不兼容结构的协调——适配器模式(三) 不兼容结构的协调——适配器模式...
### 设计模式实验报告——适配器模式 #### 一、引言 设计模式是一种在特定情境下解决软件设计问题的通用解决方案。它为解决常见问题提供了一种可复用的设计思路,帮助开发者构建出更加灵活、易于维护的系统。在...
### 设计模式——适配器模式(Adapter Pattern) 在软件工程领域中,设计模式是一种用于解决常见问题的标准化方法。这些模式提供了一种系统化的解决方案,帮助开发人员编写出更易于理解、维护和扩展的代码。适配器...
在本文中,我们将重点讨论一种结构型设计模式——适配器模式(Adapter Pattern)。适配器模式的主要目标是使得原本不兼容的类能够协同工作,通过创建一个适配器来作为两个类之间的桥梁。 适配器模式通常包含两个...
《Design Pattern实验指导手册6》主要探讨了设计模式中的结构性模式——适配器模式(Adapter Pattern)。适配器模式是一种结构型设计模式,它的主要目的是解决不同接口或类之间的兼容性问题,使得原本不兼容的类能够...
4.1AdapterPattern(适配器模式) 96 4.1.1定义 96 4.1.2现实中的实例——电脑电源适配器 97 4.1.3C#实例——化学数据银行 98 4.1.4Java实例——清洁系统 102 4.1.5优势和缺陷 104 4.1.6应用情景 104 4.2...
pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/...
pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/...
pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/...
本文主要探讨的是**结构型模式**中的一个核心概念——变压器模式(Adapter Pattern),并深入分析其在Java编程中的应用。 #### 结构型模式概述 结构型模式关注于如何组织类和对象来构建更大的结构。这类模式可以...
pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/...
pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/...
#### 九、适配器模式(Adapter Pattern) 适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 #### 十、模板方法模式(Template ...
pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/...
pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/...
pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/...