原文:http://blog.csdn.net/zhangerqing/article/details/8239539

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。首先,我们来看看类的适配器模式,先看类图:

核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码:

[java] view plain copy
  1. public class Source {
  2. public void method1() {
  3. System.out.println("this is original method!");
  4. }
  5. }
[java] view plain copy
  1. public interface Targetable {
  2. /* 与原类中的方法相同 */
  3. public void method1();
  4. /* 新类的方法 */
  5. public void method2();
  6. }
[java] view plain copy
  1. public class Adapter extends Source implements Targetable {
  2. @Override
  3. public void method2() {
  4. System.out.println("this is the targetable method!");
  5. }
  6. }

Adapter类继承Source类,实现Targetable接口,下面是测试类:

[java] view plain copy
  1. public class AdapterTest {
  2. public static void main(String[] args) {
  3. Targetable target = new Adapter();
  4. target.method1();
  5. target.method2();
  6. }
  7. }

输出:

this is original method!
this is the targetable method!

这样Targetable接口的实现类就具有了Source类的功能。

对象的适配器模式

基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。看图:

只需要修改Adapter类的源码即可:

[java] view plain copy
  1. public class Wrapper implements Targetable {
  2. private Source source;
  3. public Wrapper(Source source){
  4. super();
  5. this.source = source;
  6. }
  7. @Override
  8. public void method2() {
  9. System.out.println("this is the targetable method!");
  10. }
  11. @Override
  12. public void method1() {
  13. source.method1();
  14. }
  15. }

测试类:

[java] view plain copy
  1. public class AdapterTest {
  2. public static void main(String[] args) {
  3. Source source = new Source();
  4. Targetable target = new Wrapper(source);
  5. target.method1();
  6. target.method2();
  7. }
  8. }

输出与第一种一样,只是适配的方法不同而已。

第三种适配器模式是接口的适配器模式,接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。看一下类图:

这个很好理解,在实际开发中,我们也常会遇到这种接口中定义了太多的方法,以致于有时我们在一些实现类中并不是都需要。看代码:

[java] view plain copy
  1. public interface Sourceable {
  2. public void method1();
  3. public void method2();
  4. }

抽象类Wrapper2:

[java] view plain copy
  1. public abstract class Wrapper2 implements Sourceable{
  2. public void method1(){}
  3. public void method2(){}
  4. }
[java] view plain copy
  1. public class SourceSub1 extends Wrapper2 {
  2. public void method1(){
  3. System.out.println("the sourceable interface's first Sub1!");
  4. }
  5. }
[java] view plain copy
  1. public class SourceSub2 extends Wrapper2 {
  2. public void method2(){
  3. System.out.println("the sourceable interface's second Sub2!");
  4. }
  5. }
[java] view plain copy
  1. public class WrapperTest {
  2. public static void main(String[] args) {
  3. Sourceable source1 = new SourceSub1();
  4. Sourceable source2 = new SourceSub2();
  5. source1.method1();
  6. source1.method2();
  7. source2.method1();
  8. source2.method2();
  9. }
  10. }

测试输出:

the sourceable interface's first Sub1!
the sourceable interface's second Sub2!

达到了我们的效果!

讲了这么多,总结一下三种适配器模式的应用场景:

类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。

对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。

接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。

适配器模式(Adapter)相关推荐

  1. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...

  2. c++适配器模式adapter

    适配器模式adapter 概念 角色和职责 案例 概念 Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式. 角色和职责 适用于: 是将一个 ...

  3. 【设计模式】—— 适配器模式Adapter

    模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...

  4. 『设计模式』适配器模式(Adapter)

    23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...

  5. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  6. 适配器模式(Adapter Class/Object)

    适配器模式(Adapter Class/Object) 是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作. 举个例子:macbook pro有一个HDMI接口,一条H ...

  7. 结构型模式——适配器模式(Adapter)

    文章目录 什么是适配器模式 适配器模式的结构 代码展示 定义目标类和目标接口 定义电脑类 编写测试类 适配器模式测试 定义适配者类接口和子类对象 定义适配器类 编写测试类 整体类型结构图 结论 弊端 ...

  8. 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库 ...

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

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  10. C#设计模式——适配器模式(Adapter Pattern)

    一.概述 在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件 ...

最新文章

  1. java 变量作用域 c语言_java - 数据结构 c语言 作用域问题
  2. 如何撰写对用户有吸引力的标题
  3. DeepID:Python基于Caffe的DeepID2实现人脸识别的简介、实现之详细攻略
  4. pythorch学习笔记
  5. 2016/3/16 高级查询 ①连接查询 ②联合查询 ③子查询 无关 相关
  6. CentOS 7 yum 安装php5.6
  7. shell 获取家目录_一篇教会你写90%的shell脚本
  8. 电脑老是弹出vrvedp_m_出现三个可疑进程vrvedp_m.exe vrvrf_c.exe vrvsafec.exe
  9. Jeecg入门篇,高手掠过
  10. 微博机器学习平台架构及在微博推荐中的应用
  11. redis实现分页排序
  12. 小学计算机说课稿模板,小学信息技术说课稿模板
  13. kodi电视smb android,小米/天猫魔盒KODI(XBMC)SMB协议播放测试
  14. 使用nodejs发送电子邮件
  15. Gym 100818F Irrational Roots
  16. 算法:什么是宠物收养所问题?
  17. webStorm的一些快捷键
  18. 如何制作u盘pe启动盘?
  19. 解决win10右击鼠标卡顿问题
  20. loadrunner录制网页脚本时打不开或打开慢

热门文章

  1. UDP传输图片(分包)
  2. 接口测试平台代码实现26:项目详情页设计
  3. word如何一次性删除所有批注
  4. RL(Chapter 6): Windy Gridworld
  5. 地图中的鼠标移动响应
  6. python学习2——if语句、elif、if嵌套、while循环、while嵌套
  7. 【计算机毕业设计】基于微信小程序的社区疫情防控系统
  8. DAO 中独特的通证经济
  9. len是python的内置函数吗_len(x) 击败 x.len(),从内置函数看 Python 的设计思想(内有公号宣传,不喜勿进)...
  10. pyqt5使用pyinstaller打包项目为exe