美文网首页
适配器模式

适配器模式

作者: CodeYang | 来源:发表于2021-09-15 13:21 被阅读0次

    适配器模式

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    比如:
    读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。

    示例图示

    image.png

    代码源于菜鸟教程

    示例代码

    /**
     * 适配器模式
     */
    public class Test implements Cloneable {
        public static void main(String[] args) throws CloneNotSupportedException  {
            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");
        }
    
    }
    
    interface MediaPlayer {
         void play(String audioType, String fileName);
    }
    
    interface AdvancedMediaPlayer {
         void playVlc(String fileName);
         void playMp4(String fileName);
    }
    
    class VlcPlayer implements AdvancedMediaPlayer{
        @Override
        public void playVlc(String fileName) {
            System.out.println("播放VLC文件: "+ fileName);
        }
    
        @Override
        public void playMp4(String fileName) {
            //什么也不做
        }
    }
    
    class Mp4Player implements AdvancedMediaPlayer{
    
        @Override
        public void playVlc(String fileName) {
            //什么也不做
        }
    
        @Override
        public void playMp4(String fileName) {
            System.out.println("播放MP4文件: "+ fileName);
        }
    }
    
    /**
     * 适配器
     */
    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);
            }
        }
    }
    
    /**
     * 播放器
     */
    class AudioPlayer implements MediaPlayer {
        MediaAdapter mediaAdapter;
    
        @Override
        public void play(String audioType, String fileName) {
    
            //播放 mp3 音乐文件的内置支持
            if(audioType.equalsIgnoreCase("mp3")){
                System.out.println("播放MP3文件: "+ fileName);
            }
            //mediaAdapter 提供了播放其他文件格式的支持
            else if(audioType.equalsIgnoreCase("vlc")
                    || audioType.equalsIgnoreCase("mp4")){
                mediaAdapter = new MediaAdapter(audioType);
                mediaAdapter.play(audioType, fileName);
            }
            else{
                System.out.println("未支持的音频格式: "+ audioType);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:适配器模式

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