设计模式02:结构型设计模式之适配器模式使用情景及其基础Demo

1.适配器模式

  • 用途:接口兼容
  • 评价:复杂、冗余、难以调试,个人认为直接在旧系统那里封装一个新实现调用旧实现就好了
  • 场景:系统A、B、C想调用同一个功能接口,但是实现细节存在差异时(其实就是入参和出参转化处理,封装在一个新的类)
cs 复制代码
// 旧系统接口
public interface IOldSystem
{
    string GetData();
}

// 旧系统实现
public class OldSystem : IOldSystem
{
    public string GetData()
    {
        return "Data from Old System";
    }
}

// 新系统接口
public interface INewSystem
{
    string FetchData();
}

// 新系统实现
public class NewSystem : INewSystem
{
    public string FetchData()
    {
        return "Data from New System";
    }
}

// 适配器类,使 OldSystem 可以适配 NewSystem 的接口
public class SystemAdapter : IOldSystem
{
    private readonly INewSystem _newSystem;

    // 构造函数注入 NewSystem
    public SystemAdapter(INewSystem newSystem)
    {
        _newSystem = newSystem;
    }

    // 实现 IOldSystem 接口的方法,调用 NewSystem 的 FetchData 方法
    public string GetData()
    {
        //【重点】这里还能对入参、出参作细节处理,不仅仅是返回新的实现
        return _newSystem.FetchData();
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 第一步:创建一个新系统的实例
        //INewSystem newSystem = new NewSystem();
        var newSystem = new NewSystem();

        // 第二步:使用适配器将新系统适配到旧系统接口 
        IOldSystem adaptedSystem = new SystemAdapter(newSystem);

        // 第三步:通过旧系统接口访问新系统的数据
        Console.WriteLine(adaptedSystem.GetData());
    }
}
相关推荐
其美杰布-富贵-李几秒前
Spring Boot 依赖注入说明文档
java·spring boot·python
tachibana25 分钟前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
our_times10 分钟前
2026年Java开发者破局指南:Spring AI 2.0 与 Agent 开发实战
java·人工智能·spring
杨充35 分钟前
10.可测试性实战设计
设计模式·开源·代码规范
杨充43 分钟前
9.重构十二式的实战
设计模式·开源·代码规范
糖果店的幽灵1 小时前
langgraph的四种state解析
java·前端·javascript·langgraph
杨充1 小时前
6.设计原则的全景图
设计模式·开源·全栈
杨充1 小时前
4.接口而非实现编程
java·后端·架构
杨充1 小时前
2.面向对象的特性
设计模式
杨充1 小时前
7.SOLID原则案例汇
设计模式·开源·全栈