Java 适配器模式详解

这篇具有很好参考价值的文章主要介绍了Java 适配器模式详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是适配器模式?

适配器模式是一种结构型设计模式,其用途是将一个类的接口转换成客户端所期望的另一种接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式的实现方式

适配器模式通过创建一个实现目标接口的适配器类来实现,该适配器类存有一个对源类的实例的引用,并将请求重定向到源类的方法。通过这种方式,适配器类可以将目标接口和源接口之间的差异隐藏起来,使得它们可以协同工作。

适配器模式的优点

适配器模式能够将不兼容的接口转换为客户端所期望的接口,从而使得原本不兼容的类可以协同工作。

适配器模式的缺点

适配器模式增加了代码的复杂性,增加了额外的软件层次,并可能降低性能。

适配器模式的应用场景

适配器模式可应用于以下场景:

  • 当需要使用已有的类,但是其接口与系统所需的接口不一致时,可以通过适配器模式来创建一个适配器类。
  • 当需要重用一些现存的类,但是接口与其它环境要求不一致时,也可以使用适配器模式。

适配器模式的案例

下面我们通过一个简单的实例来展示适配器模式的应用。假设我们有一个MP3播放器和一个普通CD播放器,现在需要将普通CD播放器接口转换为MP3播放器接口,以便让普通CD播放器能够兼容MP3播放器。这个问题可以通过适配器模式来解决。

首先,定义一个目标接口MediaPlayer,该接口定义了MP3播放器所需的所有方法:

public interface MediaPlayer {
    public void play(String audioType, String fileName);
}

然后,定义一个源类AdvancedMediaPlayer,该类定义了普通CD播放器的接口:

public interface AdvancedMediaPlayer {
   public void playVlc(String fileName);
   public void playMp4(String fileName);
}

为了将普通CD播放器的接口转换为MP3播放器的接口,我们需要创建一个适配器类MediaAdapter,该类实现了MediaPlayer接口,并使用AdvancedMediaPlayer接口来实现其方法:

public class MediaAdapter implements MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

   public MediaAdapter(String audioType){
      if(audioType.equalsIgnoreCase("vlc") ){
         advancedMusicPlayer = new VlcPlayer();
      } else if (audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer = new Mp4Player();
      }
   }

   @Override
   public void play(String audioType, String fileName) {
      if(audioType.equalsIgnoreCase("vlc")){
         advancedMusicPlayer.playVlc(fileName);
      }else if(audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer.playMp4(fileName);
      }
   }
}

最后,我们定义一个客户端类AudioPlayer,该类实现了MediaPlayer接口,并使用MediaAdapter来适配普通CD播放器的接口:

public class AudioPlayer implements MediaPlayer {

   MediaAdapter mediaAdapter; 

   @Override
   public void play(String audioType, String fileName) {

      //播放 mp3 音乐文件的内置支持
      if(audioType.equalsIgnoreCase("mp3")){
         System.out.println("Playing mp3 file. Name: " + fileName);
      } 
      //mediaAdapter 提供了播放其他文件格式的支持
      else if(audioType.equalsIgnoreCase("vlc") 
         || audioType.equalsIgnoreCase("mp4")){
         mediaAdapter = new MediaAdapter(audioType);
         mediaAdapter.play(audioType, fileName);
      }
      else{
         System.out.println("Invalid media. " + audioType + " format not supported");
      }
   }
}

现在我们可以使用AudioPlayer来播放MP3、VLC或MP4格式的音频文件,无论它们是由MP3播放器还是普通CD播放器提供的。

public static void main(String[] args) {
     AudioPlayer audioPlayer = new AudioPlayer();
     audioPlayer.play("mp3", "beyond the horizon.mp3");
     audioPlayer.play("mp4", "alone.mp4");
     audioPlayer.play("vlc", "far far away.vlc");
     audioPlayer.play("avi", "mind me.avi");
}

输出结果如下:

Playing mp3 file. Name: beyond the horizon.mp3
Playing mp4 file. Name: alone.mp4
Playing vlc file. Name: far far away.vlc
Invalid media. avi format not supported

从输出结果可以看出,适配器模式使得普通CD播放器可以与MP3播放器的接口兼容,从而可以被AudioPlayer所使用。文章来源地址https://www.toymoban.com/news/detail-437575.html

到了这里,关于Java 适配器模式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#中适配器模式详解

    基础介绍:    想象这样一个场景,原项目中接口返回的数据是XML格式的数据,但现在来了一个新客户,它期望接口返回的数据类型为json格式的。   想要实现要么就是改原有接口,但这样就违反了开闭原则,容易出现未知bug,影响到老客户的正常使用。   而如果写一

    2024年02月05日
    浏览(28)
  • java 适配器模式

    适配器模式(Adapter Pattern) 结构型设计模式,见名知意,就是两个不兼容的接口之间的桥梁。它结合了两个独立接口的功能。 主要解决: 常常要将一些\\\"现存的对象\\\"放到新的环境中,而新环境要求的接口是现对象不能满足的。 关键代码: 适配器继承或依赖已有的对象,实现

    2024年04月16日
    浏览(33)
  • Java 设计模式——适配器模式

    (1)如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使

    2024年02月16日
    浏览(35)
  • 设计模式篇(Java):适配器模式

    设计模式篇(Java):建造者模式 生活中的适配器例子 比如生活中的插座,在不同国家插座有着不同的规格,如果我们从一个国家去另外一个国家需要使用插座时就需要一个中间转换器把两种不同规则的插座适配一下。 生活中电脑充电器,手机充电器,手机电脑可能支持20v充电

    2024年02月11日
    浏览(39)
  • 03-JAVA设计模式-适配器模式

    它属于结构型模式,主要用于将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中,经常会有这样的情况:我们有一个现有的类,它的接口(方法、属

    2024年04月09日
    浏览(66)
  • Java适配器设计模式

    适配器模式(Adapter Pattern)是结构型设计模式的一种,适配器模式的定义是:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式中主要存在三个角色: 目标(Target)接口 :当前系统业务所期待的接口

    2024年02月15日
    浏览(34)
  • 重读Java设计模式: 适配器模式解析

    在软件开发中,经常会遇到不同接口之间的兼容性问题。当需要使用一个已有的类,但其接口与我们所需的不兼容时,我们可以通过适配器模式来解决这一问题。适配器模式是一种结构型设计模式,它允许接口不兼容的类之间进行合作。本文将深入探讨适配器模式的概念、应

    2024年04月09日
    浏览(62)
  • Java与设计模式(7):适配器模式

    适配器模式是一种结构型设计模式,它允许将一个类的接口转换为客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而无法一起工作的类能够协同工作。 适配器模式通过引入一个适配器类来解决接口不兼容的问题。适配器类实现了客户端所期望的目标接口,并

    2024年02月11日
    浏览(34)
  • Java设计模式-结构型-适配器模式

    ​ 与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用

    2024年02月20日
    浏览(33)
  • Go和Java实现适配器模式

    我们通过下面的实例来演示适配器模式的使用,其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级 的音频播放器来播放 vlc 和 mp4 文件。 适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的 功能。 这种

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包