设计模式之 适配器模式 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.mp4
        player.Play("song2.avi");  // 输出: Invalid format or not supported: song2.avi
    }
}

适配器模式的工作原理:

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

总结:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值