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

1.类的适配器模式

实现思想是:有一个类Source,拥有一个方法method1,待适配;目标接口是Targetable,通过Adapter类,将Source类的功能扩展到Targetable中,具体代码如下:

public class Source{

  public void method1(){

    System.out.println("This is Source's method1");

  }

}

public interface Targetable{

  public void method1();

  public void method2();

}

public class Adapter extends Source implements Targetable{

  public void method1(){

    System.out.println("This is Adapter's method1");

  }

  @Override

  public void method2(){

    System.out.println("This is Adapter's method2");

  }

}

测试类:

public class AdapterTest{

  public static void main(String [] args){

    Targetable targetable = new Adapter();

    targetable.method1();

    targetable.method2();

  }

}

2.对象的适配器模式

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 Targetable's method2");

  }

  @Override

  public void method1(){

    source.method1();

  }

}

测试类:

public class AdapterTest{

  public static void main(String [] args){

    Source source = new Source();

    Targetable wrapper = new Wrapper(source);

    wrapper.method1();

    wrapper.method2();

  }

}

3.接口的适配器模式

UML图如下:

接口的适配器模式的原理是:通过抽象类Wrapper实现Sourceable接口的方法,然后其他的类可以通过抽象类Wrapper来选择性的实现接口的方法。

代码如下:

public Interface Sourceable(){

  public void method1();

  public void method2();

}

public abstract class Wrapper implements Sourceable{

  @Override

  public void method1(){}

  @Override

  public void method2(){}

}

public class SourceSub1 extends Wrapper{

  public void method1(){

    System.out.println("This is the Interface's first Sub1!");

  }

  public void method2(){

    System.out.println("This is the Interface's seconds Sub2!");

  }

}

main方法:

public class Wrapper{

  public static void main(String [] args){

    Sourceable sourceSub1 = new SourceSub1();

    sourceable sourceSub2 = new SourceSub2();

    sourceSub1.method1();

    sourceSub1.method2();

    sourceSub2.method1();

    sourceSub2.method2();

  }

}

转载于:https://www.cnblogs.com/qadyyj/p/5645963.html

二十三种设计模式之:适配器模式相关推荐

  1. 二十三种设计模式[6] - 适配器模式(Adapter Pattern)

    前言 适配器,属于类结构型模式.<设计模式 - 可复用的面向对象软件>一书中将之描述为" 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可 ...

  2. Java的二十三种设计模式(适配器模式(Adapter)、对象的适配器模式)

    适配器模式(Adapter) 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式 ...

  3. 二十三种设计模式-六大原则

    二十三种设计模式 一.创建型: 单例模式.工厂模式.抽象工厂模式.原型模式.建造者模式: 二.结构型: 代理模式,装饰器模式.适配器模式.外观模式.组合模式.享元模式.桥梁模式: 三.行为型: 策略模 ...

  4. 深入理解常见的二十三种设计模式

    深入理解常见的二十三种设计模式 文章目录 深入理解常见的二十三种设计模式 一.设计模式的分类 1.1 创建型(五种) 1.2 结构型(七种) 1.3 行为型(十一种) 二.创建型 2.1 单例模式 2 ...

  5. Java二十三种设计模式 之代理(proxy)

    Java二十三种设计模式 之代理(proxy) 今天我们学习一下静态代理和动态代理 我们来看代码(写一个坦克运行了多少时间): 第一种方法: public calss Tank implements ...

  6. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  7. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  8. 第二部分:二十三种设计模式解读——什么是工厂方法模式

    二十三种设计模式解读--什么是工厂方法模式 author:陈镇坤27 日期:2022年2月10日 修改日期:2022年6月23日 文章目录 二十三种设计模式解读--什么是工厂方法模式 一.工厂方法模式 ...

  9. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  10. Java 二十三种设计模式

    一.单例模式 定义 Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有 ...

最新文章

  1. 角色转移服务器维护怎么回事,服务器互通及游戏角色转移说明
  2. 【React 实战教程】从0到1 构建 github star管理工具
  3. Java:带符号右移和无符号右移
  4. Highly Available (Mirrored) Queues
  5. 腾讯高性能图计算框架Plato及其算法应用
  6. Ubuntu8.10安装小记
  7. python错误集合
  8. 深圳美景品牌策划机构:美景推动国际品牌MASHIMARO闪电招商,3天签约211家
  9. 12月22号至27号进度报告
  10. CE教程 第八章 《注入++》
  11. 两年前疫情刚开始时写的手机上的悬浮贴图软件:悬浮便利贴 - 在手机屏幕上贴图、贴文字
  12. Flash加速功能实现
  13. git 报错did not match any file(s) known to git
  14. 在家干什么副业好?工作之余做什么副业比较好
  15. echarts之静态与动态地图
  16. linux多线程编程--学习笔迹4
  17. Java中文乱码破碎重组_Java 关于中文乱码问题的解决方案与经验
  18. 165体重_女生165cm标准体重
  19. Pinia 详细教程
  20. COM, OLE技术概述

热门文章

  1. DE26 Continuation: Repeated Real Eigenvalues
  2. softmax多分类
  3. pycharm下的第一个函数程序
  4. java字符编码详解_Java中字符编码格式详解
  5. php把这两个二维数组合并,两个二维数组的合并
  6. 如何使用scikit-learn工具来进行PCA降维
  7. 百度推广怎么样做才可以有效果呢?
  8. glide源码中包含了那种设计模式_源码中的设计模式-单例模式
  9. java判断jd安装,java - 安装和使用 java 反编译应用: jd-compiler ,以及命令行的使用...
  10. java div2_系统学习 javaweb2----HTML语言2