设计模式之适配器模式
适配器模式
- 适配器模式是作为两个不同的接口的一种聚合,比如说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
适配器模式的优势
- 可以让两个不同的接口作为一个适配的接口使用,这样可以减少对下层的关系。
本文来自博客园,作者:懒惰ing,转载请注明原文链接:https://www.cnblogs.com/landuo629/p/14364839.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?