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

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

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

先看类的适配器模式
核心思想就是:有一个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. 【青少年编程】【三级】小鸡吃虫
  2. [Android] 检讨书生成器1.0
  3. kafka 串讲:架构模型、角色功能梳理
  4. 解决 :sudo:/etc/sudoers 可被任何人写
  5. Linux的实际操作:查询用户id切换用户su -
  6. 解决前后端交互Long类型精度丢失的问题
  7. C++中友元函数,友元类数详解
  8. 关于CSS兼容IE与Firefox要点分析
  9. 云原生数据编排厂商Alluxio获5000万美元C轮融资
  10. (操作系统)系统调用
  11. java+lambda+本质_Java8 Lambda本质论
  12. 如何用阿里云服务器建立一个wordpress网站
  13. eclipse console 输出数据量大时不完整问题
  14. 在线URLEncode编码,URLDecode解码工具
  15. linux 中文转unicode,Linux下汉字编码的转换
  16. linux命令不断更新
  17. java dns缓存清理_清除DNS缓存信息方法
  18. android中实现图片圆形效果
  19. 计算机主硬盘,电脑是固态和机械双盘系统在固态为什么显示主硬盘是机械盘
  20. MacOS-Mac开发和iOS开发的区别

热门文章

  1. 如何在 Mac 上的“磁盘工具”中使用密码加密和保护储存设备?
  2. 如何用键盘快捷键打开 macOS 控制中心?
  3. innodb事务锁的一些常见数据结构
  4. 不同操作系统查看FC HBA卡信息的方法总结
  5. MySQL只有.frm文件恢复表结构
  6. bio、nio、aio及select、poll、epoll
  7. java爬取html过快,需要输入验证码
  8. golang 中strconv包用法
  9. 携程初赛 携程全球数据中心建设 球面上两点的最短距离 + 最小生成树
  10. SQL Server2000企业管理器打不开-解决方法