1.Adapter模式

在程序中,经常会出现有的程序无法直接使用的情况,需要进行适当的变换之后才能使用的情况。这种用于填补现有程序和所需程序之间差异的设计模式就是Adapter模式

Adapter模式也被称为Wrapper模式,有以下两种

(1)类适配器模式(使用继承的适配器)

(2)对象适配器模式(使用委托的适配器)

2.1 示例程序1(使用继承的适配器)

使用了“类适配器模式”的示例程序的类图(使用继承)

Banner类

是现在的实际情况

public class Banner {private String string;public Banner(String string) {this.string = string;}public void showWithPattern() {System.out.println("(" + string + ")");}public void showWithStar() {System.out.println("*" + string + "*");}
}

Print接口

是需求的接口

public interface Print {void printWeek();void printStrong();
}

PrintBanner类

扮演适配器的角色。它继承了Banner类,继承了showWithParen方法和showWithAster方法。同时,它又实现了Print接口,实现了PrintWeak方法和printStrong方法

public class PrintBanner extends Banner implements Print{public PrintBanner(String string) {super(string);}@Overridepublic void printWeek() {showWithPattern();}@Overridepublic void printStrong() {showWithStar();}
}

Main类

public class Main {public static void main(String[] args) {Print print = new PrintBanner("Hello");print.printWeek();print.printStrong();}
}

2.2 示例程序2(使用委托的示例程序)

使用了“对象适配器模式”的示例程序的类图(使用委托)

Print类

public abstract class Print {public abstract void printWeek();public abstract void printStrong();
}

PrintBanner类

public class PrintBanner extends Print{private Banner banner;public PrintBanner(String string) {this.banner = new Banner(string);}@Overridepublic void printWeek() {banner.showWithPattern();}@Overridepublic void printStrong() {banner.showWithStar();}
}

3.Adapter模式中的登场角色

Target(对象):该角色负责定义所需的方法。在示例程序中,由Print接口(使用继承时)和Print类(使用委托时)扮演此角色

Client(请求者):该角色负责使用Target角色所定义的方法进行具体的处理。在示例程序中由Main类扮演角色

Adpatee(被适配):是一个持有特定方法的角色。在示例程序中由Banner扮演此角色

Adapter(适配):使用Adpatee角色的方法来满足Tatget角色的需求,这是Adapter模式的目的,也是Adapter角色的作用。在示例程序中,由PrintBanner类扮演角色

4.拓展思路的要点

什么时候使用Adapter模式

很多时候,我们并非从零开始编程,经常会用到现有的类。特别是当前类已经通过充分的测试,BUG很少,而且已经被用于其他软件之中时,我们更愿意将这些作为组件重复利用。

Adapter模式会对现有的类进行适配,生成新的类,通过该模式可以很方便地创建我们所需要的方法群。当出现BUG时,由于我们很明确的知道BUG不在现有的类(Adaptee角色)中,所以只需要调查扮演Adapter角色的类即可,这样一来,代码问题的排查会变的非常简单。

如果没有现成的代码

让现有的类适配新的接口(API)时,使用Adapter模式似乎是理所当然的。不过实际上,我们在让现有的类适配新的接口时,常常会有“只要将这里稍微改一下就可以了”的想法,一不留神就会修改现有的代码。但是需要注意的是,如果对已经测试完毕的代码进行修改,就必须在修改后重新测试。

使用Adapter模式可以完全不改变现有代码的前提下使用现有代码适配与新的接口(API)。此外,在Adapter模式中,并非一定要修改现成的代码,只要知道现有类的功能,就可以编写出新的类

版本升级与兼容性

使用 Adapter 模式可以很好地解决软件版本升级后出现的兼容性问题。

设计模式2--Adapter模式相关推荐

  1. 设计模式--适配器(Adapter)模式

    模式定义 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 类图 应用场景 1.当你希望使用某些现有类,但其接口与你的其他代码不兼容时: 2 ...

  2. java设计模式adapter_Java设计模式--适配器(Adapter)模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

  3. 设计模式之adapter模式

    adaper模式的适用场景为:我们想复用一个已有的类,但是类的接口和复用环境不一致.比如我们要调用第三方的sdk,但是接口不能直接调用,这时可以使用adapter模式. UML图如下: 可以adapt ...

  4. 结城浩的《图解设计模式》设计模式之Adapter模式的理解

    书中举的电源适配器的例子,还有网上各种同类的例子,无法说服我. Banner类的两个方法,代表输出交流100伏,虽然外部调用的是Print接口的要输出12伏特的方法,但是实际还是调用PrintBann ...

  5. 浅谈设计模式之五——Adapter模式

    这一节开始谈谈结构型模式.结构型模式包括:**适配器.桥接.组成.装饰.外观.享元.代理模式**7种设计模式.这一节说一下适配器模式,适配器模式可以分为类适配器和对象适配器,类适配器其实就是多继承,一 ...

  6. 3.设计模式--适配器模式(adapter模式)

    1.场景 适配器模式可能是开发人员用的最多的一种设计模式,做后台开发你可能每天都在使用.只是不知道他的名字:现实中的适配器你应该不会陌生,新款的IQOO 8 pro手机充电器已经达到了120w,实际上 ...

  7. 设计模式02——Adapter模式

    定义 适配器设计模式,顾名思义就是将适配器的作用总结抽象成为一种代码的组织方式,将现有的代码通过适配器进行适配,以满足项目对另外一个类或者接口的要求.换句话说就是将一个类的接口适配(包装/转换)成客户 ...

  8. JAVA设计模式-13-适配器模式

    参考:http://blog.csdn.net/pengjunlee/article/details/52347644 文章中部分经典内容参考以下文章: GoF经典著作< Design Patt ...

  9. 设计模式-Adapter模式

    目录 相关概念 对象适配器 类适配器 一个例子 总结 适配器模式(Adapter Pattern)是结构型模式.主要用来解决接口不兼容的问题,将一个类的接口变换成客户端所期待的另一种接口,从而使原本因 ...

  10. java设计模式6--适配器模式(Adapter )

    本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址. 适配器模式(别名:包装器) 将一个类的接口转换 ...

最新文章

  1. mysql 5.6 online ddl_mysql5.6的online ddl功能测试
  2. java中解决Launch configuration TimezoneDump references non-existing project问题
  3. eclipse中的debug按钮组突然找不到了,找回方法
  4. mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
  5. 【CSS3】table的css属性
  6. iOS随机页面NSClassFromString
  7. Linux系统编程学习问题回顾
  8. java迭代器删除两个_两个迭代器的故事
  9. leetcode 331. 验证二叉树的前序序列化
  10. Service rootservice does not have a SELinux domain defined
  11. mac 允许任何源 软件安装 -- 在安全模式中没有显示
  12. iis7.5+.net4.5 报404错误
  13. ip 华三secondary_H3C交换机配置端口IP sub实例
  14. MarkDown语法详解(Typora编辑器)
  15. C#实现在图片上绘图(填充)以及橡皮擦功能
  16. SSH免密登陆功能配置
  17. 业务中台、技术中台、数据中台、AI中台
  18. android关机动画
  19. STM32小四轴超低成本方案开源项目
  20. 注册码 文件内容 CS1.6 中英文 CD KEY注册文件内容

热门文章

  1. Papervision3D拖动物体
  2. SpringBoot+Vue项目旅游信息推荐系统
  3. ubuntu16.04+caffe+GTX1060+DIGITS安装方法
  4. 程序员自学者的福利来了,各种编程视频教程,助你自学编程畅通无阻。
  5. 网络入门-华为、锐捷、思科命令了解
  6. Linux --OSI TCP/IP协议族
  7. 国际项目投标那些事(三)海外项目招标文件的组成
  8. BEV和Transformer对无人驾驶硬件体系的巨大改变
  9. 分区丢失怎么恢复?易我分区大师恢复丢失分区
  10. 在nuc972上实现I2C接口数字电位器isl95311的驱动