适配器模式设计

电子说

1.3w人已加入

描述

适配器模式一般是在我们要把”现有的对象“应用到新的环境中时使用,通过编写一个Adapter类,把原有的类应用到新的类中,而不必修改原有类,也不必重写已有类。

如下图所示,原有一个AdvancedPlayer接口类,可以播放flv和MP4格式的视频文件。现在新建了一个MediaPlayer接口类,使之可以播放MP3、flv和MP4格式的文件。

因为已有AdvancedPlayer接口类实现了播放flv和MP4格式的文件,现在只需要编写一个播放MP3格式文件的AudioPlayer实现类和一个Adapter实现类,在Adapter类中使用AdvancedPlayer类的对象,使之可以播放flv和MP4类型的文件。

适配器

AdvancedPlayer接口类:

package adapter;
public interface AdvancedPlayer {
  public void playFlv();
  public void playMP4();
}

FlvPlayer实现类:

package adapter;
public class FlvPlayer implements AdvancedPlayer {
  @Override
  public void playFlv() {
    System.out.println("播放Flv格式文件");
  } 
  @Override
  public void playMP4() {   
  }
}

MP4Player实现类:

package adapter;
public class MP4Player implements AdvancedPlayer{
  @Override
  public void playFlv() {
  }
  @Override
  public void playMP4() {
    System.out.println("播放MP4文件");  
  }
}

MediaPlayer接口类:

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

AudioPlayer实现类:

package adapter;
public class AudioPlayer implements MediaPlayer {
  Adapter adapter;
  @Override
  public void play(String audioType, String fileName) {
    if(audioType.equals("MP3")) {
      System.out.println("播放MP3:"+fileName);
    }else if(audioType.equals("flv")||audioType.equals("MP4")) {
      adapter=new Adapter(audioType);
      adapter.play(audioType, fileName);
    }else {
      System.out.println("文件格式未知");
    }  
  }
}

Adapter适配器实现类:

package adapter;
public class Adapter implements MediaPlayer{
  AdvancedPlayer advancedPlayer;
  public Adapter(String audioType) {
    if(audioType.equals("flv")) {
      advancedPlayer =new FlvPlayer();
    }else if(audioType.equals("MP4")) {
      advancedPlayer = new MP4Player();
    }
  }
  @Override
  public void play(String audioType,String fileName) {
    if(audioType.equals("flv")){
      advancedPlayer.playFlv();
    }else if(audioType.equals("MP4")) {
      advancedPlayer.playMP4();
    }  
  }
}

主函数调用方式:

package main;
import adapter.*;
public class AdapterPattern {
  public static void main(String[] args) {
    AudioPlayer audioPlayer=new AudioPlayer();

    audioPlayer.play("flv", "视频.flv");
    audioPlayer.play("MP4", "视频.MP4");
    audioPlayer.play("MP3", "音乐.MP3");
  }
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分