适配器模式属于七种结构性模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)之一:

适配器模式又分三种:类的适配器模式、对象的适配器模式、接口的适配器模式。

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

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

public class Source {  public void method1() {  System.out.println("this is original method!");  }
} 

    public interface Targetable {  /* 与原类中的方法相同 */  public void method1();  /* 新类的方法 */  public void method2();  }  

    public class Adapter extends Source implements Targetable {  @Override  public void method2() {  System.out.println("this is the targetable method!");  }  }  

下面是测试类:

    public class AdapterTest {  public static void main(String[] args) {  Targetable target = new Adapter();  target.method1();  target.method2();  }  }  

输出:

this is original method!
this is the targetable method!

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

对象的适配器模式

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

    public class Wrapper implements Targetable {  private Source source;  public Wrapper(Source source){  super();  this.source = source;  }  @Override  public void method2() {  System.out.println("this is the targetable method!");  }  @Override  public void method1() {  source.method1();  }  }  

测试类:

    public class AdapterTest {  public static void main(String[] args) {  Source source = new Source();  Targetable target = new Wrapper(source);  target.method1();  target.method2();  }  }  

接口的适配器模式:

有时候我们写的接口里面有多个抽象方法,我们写实现类的时候,必须全部实现这些抽象方法,有时候没有必要,可以借助抽象类来解决,

这个抽象类实现该接口,我们一个实体类继承该抽象类就不用重写全部的接口里的方法了。

    public interface Sourceable {  public void method1();  public void method2();  }  

    public abstract class Wrapper2 implements Sourceable{  public void method1(){}  public void method2(){}  }  

    public class SourceSub1 extends Wrapper2 {  public void method1(){  System.out.println("the sourceable interface's first Sub1!");  }  }  

    public class SourceSub2 extends Wrapper2 {  public void method2(){  System.out.println("the sourceable interface's second Sub2!");  }  }  

    public class WrapperTest {  public static void main(String[] args) {  Sourceable source1 = new SourceSub1();  Sourceable source2 = new SourceSub2();  source1.method1();  source1.method2();  source2.method1();  source2.method2();  }  }  

输出:

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

转载于:https://www.cnblogs.com/longhaolove/p/7885504.html

23种设计模式之适配器模式代码实例相关推荐

  1. Java进阶 23种设计模式 详解+应用+实例代码

    文章目录 前言 设计模式六大原则 1.单一原则 (1) 概念 (2) 优点 2.开闭原则 (1) 概念 3.里氏替换原则 (1) 概念 4.依赖倒置原则 (1) 概念 (2) 作用 5.接口隔离原则 ...

  2. 23种设计模式详解(代码讲解、持续更新)

    目录 设计模式分类 设计模式的六大原则 创建型模式 1.工厂方法模式(Factory Method) 2.建造者模式(Builder Pattern(常用.常见)) 行为型模式 模板模式(Templa ...

  3. 23 种设计模式详解 代码实现全解析

    设计模式 Design Pattern 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式是为了可重用代码.让代码更容易被他人理解并且保证代码可靠性. 在<设计模式 ...

  4. 23种设计模式及简单代码

    1. 概述 随着做项目增多不可避免地接触到了设计模式,现在各大文档中呈现的设计模式总共有23种,实际上使用中的肯定比23种多,为了让自己深刻理解设计模式,本博决定自己手写这些设计模式,便于在项目中灵活 ...

  5. (六)JAVA设计模式23种设计模式之适配器模式实例demo

    适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的 ...

  6. 细数23种设计模式以及Java代码实现

    设计模式是在软件开发中,经过验证的,用于解决在特定环境下.重复出现的.特定问题的解决方案. 创建型 创建型模式是抽象对象实例化的过程,用于帮助创建对象的实例. 工厂模式 简单工厂 描述 定义:提供一个 ...

  7. 23种设计模式(java代码实现案例)

    设计模式 创造型.结构型.行为型 创建型: 1.(类)工厂方法(Factory Method) 意图 ​ 定义一个用于创建对象的接口,让子类决定实例化哪一个类.使一个类的实例化延迟到了子类 适用性 ​ ...

  8. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之适配器模式

    · 适配器模式在王者荣耀中的应用 · 应用一:元歌通过傀儡假扮敌方的任意英雄 应用二:王者荣耀iOS与安卓互通 一.简述 简单来讲,适配器模式就是通过一个适配器将一个类的接口变成客户端所期待的另一种接 ...

  9. 23种设计模式之适配器模式

    适配器模式的定义 定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 通俗的说, 就是有 A.B两个接口, 现在要求把A和B安装在一 ...

  10. 23种设计模式(6)-适配器模式

    适配器模式 1.概述 2.适配器模式的用途 3.模式中的角色 4.实现方式 5.类适配器和对象适配器的权衡 6.缺省适配模式 1.概述 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原 ...

最新文章

  1. PWA即将推向所有Chrome平台
  2. SQL创建linkserver
  3. 查看本机中的python第三方库文档
  4. 新时代营销解决方案:敏捷BI助力银行高效精准营销
  5. mysql增量备份二进制日志,mysql增量备份二进制日志shell脚本
  6. Samba平台搭建和用户自行修改密码环境搭建笔记
  7. C++常用排序法、随机数
  8. python get score gain_Python functional.linear方法代码示例
  9. SQL Server中,varchar和nvarchar如何选择
  10. 190416每日一句
  11. html怎么防止扒站点,扒站工具-扒取站点js css的工具
  12. Ubuntu18.04中FFmpeg推流环境搭建
  13. 旅游新纪元紫山缭绕,静思生活
  14. python三维方式显示灰度图像(已验证)
  15. 使用python求解特征值与特征向量
  16. 计算机毕业设计开题报告基于SpringBoot的校淘二手网站
  17. docker基础用法及镜像和容器的常用命令大全
  18. 小米笔记本安装android系统下载失败,小米平板电脑2如果刷成安卓的系统失败了怎么处理...
  19. 【goldengate】官方文档笔记四 Oracle GoldenGate实时数据分布
  20. 制作一个简单HTML学校网页(HTML+CSS山东传媒职业学院)

热门文章

  1. 如何在 Mac 上输入带重音符的字符?
  2. 在 Mac 上的“照片”中如何把文件夹中的相簿分组?
  3. 1Password 7:Mac的密码管理工具
  4. 苹果Mac Finder 替代工具:Path Finder
  5. Mac电脑Finder侧边栏不显示iCloud云盘,如何添加
  6. 如何在macOS下调整磁盘分区大小
  7. Mac电脑上的Safari运行缓慢,卡的要死,该怎么解决?
  8. 6、PXE安装ESXI6.0
  9. Android一些关于分辨率和布局的设置
  10. 微信公众平台可为市民鉴别万余药品真伪