美文网首页
设计模式之适配器 Adapter

设计模式之适配器 Adapter

作者: 音符纸飞机 | 来源:发表于2018-11-21 18:20 被阅读4次

    重点

    • 接口之间的桥梁,兼容接口
    • 适配器继承或依赖已有对象,实现目标接口
    • 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
    适配器
    public interface IMediaPlayer {
       public void play(String audioType, String fileName);
    }
    
    public interface IOldMediaPlayer { 
       public void playVlc(String fileName);
       public void playMp4(String fileName);
    }
    
    public class VlcPlayer implements IOldMediaPlayer {
       @Override
       public void playVlc(String fileName) {
          System.out.println("Playing vlc file. Name: "+ fileName);      
       }
     
       @Override
       public void playMp4(String fileName) {
          //什么也不做
       }
    }
    
    public class Mp4Player implements IOldMediaPlayer {
     
       @Override
       public void playVlc(String fileName) {
          //什么也不做
       }
     
       @Override
       public void playMp4(String fileName) {
          System.out.println("Playing mp4 file. Name: "+ fileName);      
       }
    }
    
    public class MediaAdapter implements IMediaPlayer {
     
       IOldMediaPlayer oldPlayer;
     
       public MediaAdapter(String audioType){
          if(audioType.equalsIgnoreCase("vlc") ){
             oldPlayer = new VlcPlayer();       
          } else if (audioType.equalsIgnoreCase("mp4")){
             oldPlayer = new Mp4Player();
          }  
       }
     
       @Override
       public void play(String audioType, String fileName) {
          if(audioType.equalsIgnoreCase("vlc")){
             oldPlayer.playVlc(fileName);
          }else if(audioType.equalsIgnoreCase("mp4")){
             oldPlayer.playMp4(fileName);
          }
       }
    }
    
    public class AudioPlayer implements IMediaPlayer {
       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");
          }
       }   
    }
    

    相关文章

      网友评论

          本文标题:设计模式之适配器 Adapter

          本文链接:https://www.haomeiwen.com/subject/mfoofqtx.html