前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-适配器模式示例

设计模式-适配器模式示例

原创
作者头像
堕落飞鸟
发布2023-05-03 15:36:14
2520
发布2023-05-03 15:36:14
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏

下面是一个完整的适配器模式的Java代码示例:

代码语言:javascript
复制
// 目标接口
public interface MediaPlayer {
   public void play(String audioType, String fileName);
}

// 被适配对象
public class Mp4Player {
   public void playMp4(String fileName) {
      System.out.println("Playing mp4 file. Name: "+ fileName); 
   }
}

// 被适配对象
public class VlcPlayer {
   public void playVlc(String fileName) {
      System.out.println("Playing vlc file. Name: "+ fileName); 
   }
}

// 适配器
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);
      }
   }
}

// 客户端
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");
      }
   }   
}

// 测试代码
public class AdapterPatternDemo {
   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");
   }
}

输出结果如下:

代码语言:javascript
复制
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

在这个示例中,适配器模式将一个不支持的音频格式转换成了支持的格式,并通过适配器的方式来实现播放。具体而言,AudioPlayer 类作为客户端调用 MediaPlayer 接口的 play 方法。如果需要播放的音频格式是不支持的,AudioPlayer 将会创建一个适配器对象,并通过该适配器对象来播放音频。

在适配器模式的示例中,有以下几个角色:

  • 目标接口:MediaPlayer 接口定义了 play 方法,用于播放音频文件。
  • 被适配对象:VlcPlayerMp4Player 类表示两种不兼容的音频格式,不能直接播放。
  • 适配器:MediaAdapter 类实现了 MediaPlayer 接口,同时包含一个被适配对象的引用。MediaAdapter 类将不支持的音频格式转换成支持的格式,并通过被适配对象来实现播放。
  • 客户端:AudioPlayer 类作为客户端,使用 MediaPlayer 接口来播放音频文件。如果需要播放的音频格式不支持,AudioPlayer 将会创建一个适配器对象,通过适配器来实现播放。

适配器模式的优点在于它可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。

另外,适配器模式可以提高代码的可读性和可维护性。它可以将不相关的代码放在不同的类中,从而使代码更易于理解和维护。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com