Adapter
问题引出:
大家生活中可能碰到的一个问题就是你新买手机自带的耳机是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();
//该手机只支持2.5接口的耳机
target.provide2_5();
}
}
输出结果:我是一个3.5的接口哦
从输出结果可以看出只支持2.5接口的手机成功的使用3.5的耳机了。这就是适配器模式的作用。
对象的适配器模式:
对象的适配器模式的不同之处在于Adapter角色封装了Adaptee角色,而不像类的适配器模式所采取的继承方式。其原理基本上是相似的。
应用适配器模式的场景:
1.系统需要使用现有的类,而现有类不符合当前系统的要求。如问题的提出。
2.系统要建立一个可以重复使用的类,用来与彼此没有太大关联的类或者在将来要引用的类一起工作。在Junit中有使用适配器模式的情景。
在TestCase的runBare方法中发,在runTest方法中通过反射最终调用我们所编写的测试方法。我们可从宏观上来分析改代码,junit作为一个框架,他是没法知道我们要写些什么样的测试方法的,也是就是说他没法在runbare方法中直接调用我们所写的测试方法,他就采用适配器模式这样的一个方式来实现。Junit框架本身没法直接调用客户端所写的测试类,但他可以直接调用他本身拥有的类TestCase,这里的TestCase就相当于Adapter了,自己所写了测试类相当于Adaptee角色。
缺省的适配器模式(Default Adapter):缺省的适配器模式为一个接口提供缺省的实现,子类可以从这个缺省的实现类进行扩展,而不必而原有的接口进行扩展。相信大家在学习Swing时“AWT中事件的处理”有所接触。他的好处在于客户端不需要去实现与他无关的方法,只做他最关心的事。
- 大小: 37.2 KB
- 大小: 28.6 KB
- 大小: 12.8 KB
- 大小: 12.7 KB
分享到:
相关推荐
java设计模式【之】适配器模式【源码】【场景:水和容器】 * 适配器模式,类似(亡羊补牢) * 已经存在的类(功能已经开发完成了),与新需求的功能相似,但是略有差异 * 当已经存在的方法无法满足现有需求,需要...
C#设计模式之适配器模式应用实例
设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版
[刚刚上传的demo运行有问题,重新传了个新的],这个的一个iOS的适配器模式的实例代码,目前就是一个简单的demo,后期还会更新适配器在 MVC,MVP,MVVM中的使用,demo对应着简书:https://www.jianshu.com/p/e2ebcf19098f,...
实验7 适配器模式、外观模式与模板方法模式---Java设计模式
适配器模式的Java实现版本,包含类适配器模式和对象适配器模式的实现,同时也包含两者的UML类图
动态代理模式 适配器模式 实现,都可以运行,有一部分注解
设计模式之适配器模式,通过实际例子讲述适配器模式的使用,原理和特点
适配器模式代码demo 适配器模式代码demo 适配器模式代码demo
适配器模式 设计模式 Adapter 还请各位大S指教
设计模式-适配器模式(讲解及其实现代码)
设计模式--适配器模式java例子
设计模式C++学习之适配器模式(Adapter)
实验七:适配器模式.rar实验七:适配器模式.rar
设计模式的适配器模式的例子,希望对大家有用
设计模式系列之适配器模式,分别以Java,Android,IOS进行讨论