设计模式之适配器模式

适配器模式

  • 适配器模式是作为两个不同的接口的一种聚合,比如说SD卡适配器,无论使用TF或SD卡或者其它卡,对外输出都是USB接口。

适配器模式实例

  • 我们用播放器为例,首先我们有两个设备,一个是Vlc播放器,一个是Mp4播放器,一个需要使用playVlc按钮来播放,一个要使用playMP4按钮来播放。
// Vlc播放器
class VlcPlayer {
    playVlc(fileName) {
        console.log(`playing vlc file. name:${fileName}`)
    }
}

// Mp4播放器
class Mp4Player {
    playMp4(fileName) {
        console.log(`playing Mp4 file. name:${fileName}`)
    }
}
  • 但是我就想通过一个按钮来播放,我不管他是什么播放设备,这个时候,我们就需要一个适配器来做这个事情。
// 适配器
 class MediaAdapter {
     constructor(audioType) {
         switch (audioType) {
             case 'vlc':
                 MediaAdapter.advanceMusicPlayer = new VlcPlayer();
                 break;
             case 'mp4':
                 MediaAdapter.advanceMusicPlayer = new Mp4Player();
         }
     }
     play(audioType, fileName) {
         switch (audioType) {
             case 'vlc':
                 MediaAdapter.advanceMusicPlayer.playVlc(fileName);
                 break;
             case 'mp4':
                 MediaAdapter.advanceMusicPlayer.playMp4(fileName);
         }
     }
 }
  • 通过适配器我们可以把各种设备桥接到一个音频设备上。
class AudioPlayer {
    play(audioType, fileName) {
        switch (audioType) {
            case 'mp3':
                console.log(`playing mp3 file. name:${fileName}`);
                break;
            case 'vlc':
            case 'mp4':
                AudioPlayer.advanceMusicPlayer = new MediaAdapter(audioType);
                AudioPlayer.advanceMusicPlayer.play(audioType, fileName);
                break;
            default:
                console.log(`Invalid media.${audioType} format not supported`)
        }
    }
}
  • 那么这个时候我们就可以直接通过这个音频设备来播放我们想要的音频了。
const audioPlayer = new AudioPlayer();

audioPlayer.play('mp3', 'one.mp3'); //playing mp3 file. name:one.mp3
audioPlayer.play('vlc', 'two.vlc'); //playing vlc file. name:two.vlc
audioPlayer.play('mp4', 'three.mp3');//playing Mp4 file. name:three.mp3
audioPlayer.play('avi', 'four.mp3');//Invalid media.avi format not supported

适配器模式的优势

  • 可以让两个不同的接口作为一个适配的接口使用,这样可以减少对下层的关系。
posted @ 2021-02-02 23:40  懒惰ing  阅读(124)  评论(0编辑  收藏  举报