java设计模式之适配器模式(Adapter)

 更新时间:2017年01月03日 08:25:30   作者:yuminfeng728  
这篇文章主要介绍了java设计模式之适配器模式Adapter的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

概述

将一个类的接口转换成用户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

两种实现方式

1.类的适配器模式:
2.对象的适配器模式:

类的适配器模式的UML图,如下:

类的适配器模式把适配的类的API转换成为目标类的API。

上图设计的角色有:

目标角色(Target):这就是所期待得到的接口。
源角色(Adapee):现在需要适配的接口。
适配器角色(Adapter):是本模式的核心,适配器把源接口转换成目标接口。

代码示例:

interface Target{
  void method1();
  void method2(); //期待得到该方法
}
//源类中不具备method2中的方法。
class Adaptee{
  public void method1(){
    System.out.println("method1");
  }
}

class Adapter extends Adaptee implements Target{

  @Override
  public void method2() {
    System.out.println("this is target method");
  }

}

public class MainTest {

  public static void main(String arg[]) {
    Target target = new Adapter();
    target.method2();
  }
}

对象的适配器模式的UMl图,如下:

核心思路与类的适配器模式相同,只是将Adapter类修改,不继承Adaptee类,而是持有Adaptee类的引用。代码如下:

interface Target{
  void method1();
  void method2();
}

class Adaptee{
  public void method1(){
    System.out.println("method1");
  }
}

class Adapter implements Target{

  private Adaptee adaptee;

  public Adapter(Adaptee adaptee){
    this.adaptee = adaptee;
  }

  @Override
  public void method2() {
    System.out.println("this is target method");
  }

  @Override
  public void method1() {
    // TODO Auto-generated method stub
    adaptee.method1();
  }

}

public class MainTest {

  public static void main(String arg[]) {
    Target target = new Adapter(new Adaptee());
    target.method2();
  }
}

适配器模式的优缺点:
更好的复用性,更好的扩展性。系统需要使用现有的类,而此类的接口不符合系统的需要,那么通过适配器模式就可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
缺点:过多的使用适配器,会让系统非常凌乱,不易整体把握。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java中网络IO的实现方式(BIO、NIO、AIO)介绍

    Java中网络IO的实现方式(BIO、NIO、AIO)介绍

    这篇文章主要介绍了Java中网络IO的实现方式(BIO、NIO、AIO)介绍的相关资料,需要的朋友可以参考下
    2017-03-03
  • javaCV开发详解之收流器实现

    javaCV开发详解之收流器实现

    这篇文章主要介绍了javaCV开发详解之收流器实现,对javaCV有研究的同学,可以参考下
    2021-04-04
  • JavaWeb中过滤器Filter的用法详解

    JavaWeb中过滤器Filter的用法详解

    过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理。本文将通过示例为大家讲解JavaWeb中过滤器Filter的用法与实现,需要的可以参考一下
    2022-08-08
  • JAVA中的SPI思想介绍

    JAVA中的SPI思想介绍

    大家好,本篇文章主要讲的是JAVA中的SPI思想介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • SpringBoot 表单提交全局日期格式转换器实现方式

    SpringBoot 表单提交全局日期格式转换器实现方式

    这篇文章主要介绍了SpringBoot 表单提交全局日期格式转换器,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • SpringBoot使用自定义json解析器的使用方法

    SpringBoot使用自定义json解析器的使用方法

    本篇文章主要介绍了SpringBoot使用自定义json解析器的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Springboot实现阿里云通信短信服务有关短信验证码的发送功能

    Springboot实现阿里云通信短信服务有关短信验证码的发送功能

    短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。下面通过本文大家分享Springboot实现阿里云通信短信服务有关短信验证码的发送功能,一起看看吧
    2017-08-08
  • Elasticsearch配置文件示例示范

    Elasticsearch配置文件示例示范

    这篇文章主要为大家介绍了Elasticsearch配置文件的示例示范,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • arthas jprofiler做复杂链路的调用分析

    arthas jprofiler做复杂链路的调用分析

    这篇文章主要为大家介绍了arthas jprofiler做复杂链路的调用分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • SpringBoot @Async如何自定义线程池及使用教程

    SpringBoot @Async如何自定义线程池及使用教程

    这篇文章主要介绍了SpringBoot @Async如何自定义线程池及使用教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论