适配器模式

使用场景

已经部署的项目,无法解决新需求。目的是能让两个没有任何联系的类,能够一起工作。

image

image

实现

/// <summary>
/// 图片上传接口
/// </summary>
interface IPictureUploadService
{
    public void UploadPicture(string pictureType, string pictureName);
}
/// <summary>
/// 图片上传服务
/// </summary>
class PictureUploadService : IPictureUploadService
{
    // 1、依赖图片适配器
    private PictureUploadServiceAdpater pictureUploadServiceAdpater = new();

    /// <summary>
    /// 上传图片
    /// </summary>
    /// <param name="pictureType"></param>
    /// <param name="pictureName"></param>
    public void UploadPicture(string pictureType, string pictureName)
    {
        if (pictureType.Equals("jpg"))
        {
            Console.WriteLine($"图片名称:{pictureName},上传成功");
        }
        else if (pictureType.Equals("mp4"))
        {
            pictureUploadServiceAdpater.UploadPicture(pictureType, pictureName);
        }
    }
}

/// <summary>
/// 图片上传适配器,适配视频上传服务
/// </summary>
class PictureUploadServiceAdpater : IPictureUploadService
{
    /// <summary>
    /// 视频上传服务(被适配类)
    /// </summary>
    private VideoUploadService videoUploadServer;

    public PictureUploadServiceAdpater()
    {
        this.videoUploadServer = new VideoUploadService();
    }

    /// <summary>
    /// 目标接口(适配视频上传)
    /// </summary>
    /// <param name="pictureType"></param>
    /// <param name="pictureName"></param>
    public void UploadPicture(string pictureType, string pictureName)
    {
        videoUploadServer.UploadVideo(pictureName);
    }
}
/// <summary>
/// 视频上传服务
/// </summary>
class VideoUploadService
{
    /// <summary>
    /// 上传视频
    /// </summary>
    /// <param name="videoName"></param>
    public void UploadVideo(string videoName)
    {
        Console.WriteLine($"视频名称:{videoName},上传成功");
    }
}

客户端调用

IPictureUploadService pictureUploadService = new PictureUploadService();
pictureUploadService.UploadPicture("jpg","手机");
pictureUploadService.UploadPicture("mp4","手机");

总结

适配器使用前提

  • 系统中功能已经实现时候。
  • 系统中功能不兼容时候。

缺点

  • 导致对象违背单一职责。
  • 导致代码理解难度增大。

建议:尽量保证规范。尽量保证统一。

代码规范不统一,那么就只能只用适配器暂时解决。

posted @ 2025-07-11 19:38  龙猫•ᴥ•  阅读(12)  评论(0)    收藏  举报