设计模式之适配器模式

适配器模式

  • 适配器模式是作为两个不同的接口的一种聚合,比如说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 @   懒惰ing  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示