使用场景
已经部署的项目,无法解决新需求。目的是能让两个没有任何联系的类,能够一起工作。
实现
/// <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","手机");
总结
适配器使用前提
- 系统中功能已经实现时候。
- 系统中功能不兼容时候。
缺点
- 导致对象违背单一职责。
- 导致代码理解难度增大。
建议:尽量保证规范。尽量保证统一。
代码规范不统一,那么就只能只用适配器暂时解决。