当前位置: 首页 > news >正文

设计模式之 适配器模式 C# 范例

在 C# 中,适配器模式(Adapter Pattern)是一种结构型设计模式,旨在将一个类的接口转换成客户端所期待的另一个接口。适配器模式允许你将现有的类包装起来,使其能够与其他接口兼容。

适配器模式的使用场景:

  • 当你希望将一个类的接口与另一个接口对接,而不希望修改现有代码时。
  • 你希望在使用一些类时,它们具有一致的接口,但实际实现不同。

适配器模式的结构:

  1. Target:定义客户端所期待的接口。
  2. Adapter:将被适配的类转换为客户端所期待的接口。
  3. Adaptee:需要适配的类,通常是已经实现的功能类。
  4. Client:与 Target 交互的类。

例子:将一个老的 MediaPlayer 类与新的 AdvancedMediaPlayer 类兼容

步骤 1: 定义接口(Target)
// Target: 定义客户端所期待的接口
public interface IMediaPlayer
{void Play(string fileName);
}
步骤 2: 定义被适配的接口(Adaptee)
// Adaptee: 一个旧的播放器,只有播放 MP4 文件的功能
public class MediaAdapter : IMediaPlayer
{private readonly IAdvancedMediaPlayer _advancedMusicPlayer;public MediaAdapter(IAdvancedMediaPlayer advancedMusicPlayer){_advancedMusicPlayer = advancedMusicPlayer;}public void Play(string fileName){if (fileName.EndsWith(".mp4")){_advancedMusicPlayer.PlayMp4(fileName);}}
}public interface IAdvancedMediaPlayer
{void PlayMp4(string fileName);void PlayVlc(string fileName);
}public class AdvancedMusicPlayer : IAdvancedMediaPlayer
{public void PlayMp4(string fileName){Console.WriteLine("Playing mp4 file: " + fileName);}public void PlayVlc(string fileName){Console.WriteLine("Playing vlc file: " + fileName);}
}
步骤 3: 创建适配器类(Adapter)
 
// Adapter: 适配器将旧播放器与新播放器接口连接起来
public class AudioPlayer : IMediaPlayer
{private readonly MediaAdapter _mediaAdapter;public AudioPlayer(){// 适配器可以处理 MP4 格式_mediaAdapter = new MediaAdapter(new AdvancedMusicPlayer());}public void Play(string fileName){if (fileName.EndsWith(".mp4")){_mediaAdapter.Play(fileName);}else{Console.WriteLine("Invalid format or not supported: " + fileName);}}
}

步骤 4: 客户端代码(Client)
 
class Program
{static void Main(string[] args){IMediaPlayer player = new AudioPlayer();player.Play("song1.mp4");  // 输出: Playing mp4 file: song1.mp4player.Play("song2.avi");  // 输出: Invalid format or not supported: song2.avi}
}

适配器模式的工作原理:

  • AudioPlayer 类是客户端,它期望使用一个统一的接口 IMediaPlayer 来播放文件。
  • AdvancedMusicPlayer 类有两个专门的方法来播放 mp4 和 vlc 文件,但它并不直接符合 IMediaPlayer 接口。
  • MediaAdapter 类充当适配器,将 AdvancedMusicPlayer 的接口适配到 IMediaPlayer 接口,使得 AudioPlayer 可以直接调用 IMediaPlayer 接口,而不需要关心实际的播放器实现。

总结:

适配器模式使得你可以在不改变现有代码的情况下,增加对新接口的支持。通过适配器类来桥接客户端代码与需要适配的类,从而实现接口的兼容性。

http://www.lryc.cn/news/503863.html

相关文章:

  • LabVIEW实现GPS通信
  • [leetcode100] 543. 二叉树的直径
  • 嵌入式学习(18)-stm32F407串口接收空闲中断+DMA
  • b站视频爬虫-词云分析
  • 如何防止订单二次重复支付?
  • LeetCode 24反转链表
  • 用python的flask写的一个MQTT中转功能,http的方式发送数据和接收数据
  • img引入svg如何修改颜色
  • 计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Hadoop 机器学习 深度学习
  • 【Python】使用Numpy实现余弦相似度计算
  • nginx中的root和alias的区别
  • 探索Telnet:实现Windows远程登录Ubuntu的实践指南
  • 在 Vue 2 中隐藏页面元素的方法
  • 【Java】Java8的4个函数式接口简单教程
  • 计算机组成原理与系统结构——微程序控制
  • 【Swift】集合类型 - 数组、集合、字典
  • 3D 视觉定位技术:汽车零部件制造的智能变革引擎
  • 操作系统的基本认识
  • 使用pycharm连接远程服务器
  • 【Linux SH脚本】LinuxCheck 应急检查信息脚本
  • apifox创建一个mock接口
  • 设计一个基础JWT的多开发语言分布式电商系统
  • 委托(Delegate)与事件(Event)-(上篇)
  • Scala根据身份证前两位数判断地区
  • freeswitch(开启支持视频H264通话)
  • 启发式搜索算法和优化算法的区别
  • 数据结构初阶---二叉树---堆
  • 微信小程序中 crypto-js 加解密全攻略
  • 单片机的软件开发环境
  • 【echarts】数据过多时可以左右滑动查看(可鼠标可滚动条)