C# 适配器模式详解:让不兼容的接口协同工作

不晚
不晚
发布时间:2026-10-15 | 5人浏览过
原创

当现有组件的接口与当前系统需求不匹配时,无需修改原有代码或强行重构,只需引入适配器即可解决冲突。本文将通过 C# 代码展示如何使用对象适配器模式,将不兼容的类平滑集成到期望的标准接口中。

适配器模式的核心结构

适配器模式(Adapter Pattern)属于结构型设计模式,旨在解决两个互不兼容的接口之间的连接问题。其核心思想是定义一个包装器,该包装器实现了客户端所依赖的目标接口,同时在内部持有需要适配的原始对象,并将请求委托给原始对象处理。

第1步:理解角色关系

为了清晰展示各部分职责,我们首先看适配器模式的通用结构图:

图中主要包含三个关键实体:

  • Target(目标接口):客户端期待的统一接口标准。
  • Adaptee(适配者):拥有特殊功能但接口不匹配的旧有类或第三方库。
  • Adapter(适配器):继承自 Target,内部封装 Adaptee,负责两者间的转换。

第2步:定义目标接口(Target)

假设业务逻辑已经标准化,客户端只认得 Request() 这一标准动作。这是我们需要维持的“合同”:

class Target
{
    public virtual void Request()
    {
        Console.WriteLine("普通请求!");
    }
}

第3步:准备需适配的类(Adaptee)

这里有一个现有的类 Adaptee,它提供了一项非常有用的功能,但其方法名是 SpecialRequest(),这与客户端期待的标准不一致。

class Adaptee
{
    public void SpecialRequest()
    {
        Console.WriteLine("特殊请求!");
    }
}

第4步:构建适配器(Adapter)

适配器是实现转换的关键。我们通过创建一个继承自 Target 的新类来实现。在构造函数或初始化中,我们持有 Adaptee 的实例,并重写 Request 方法,在内部调用 Adaptee 的特殊方法。

class Adapter : Target
{
    private Adaptee ad = new Adaptee();

    public override void Request()
    {
        // 将标准请求转发给适配者的特殊请求
        ad.SpecialRequest();
    }
}

第5步:在主程序中验证效果

现在我们可以编写测试代码。客户端代码不需要知道适配器的存在,它依然像使用普通 Target 一样使用 Adapter,但实际上执行的是经过转换的逻辑。

class Program
{
    static void Main(string[] args)
    {
        // 使用直接实现 Target 的对象
        Target ta = new Target();
        ta.Request();

        // 使用适配器,外观上仍是 Target,内部调用了 Adaptee
        Target sta = new Adapter();
        sta.Request();

        Console.ReadKey();
    }
}

完成判断与总结

运行上述代码后,输出结果将分别显示 “普通请求!” 和 “特殊请求!”。这表明:

  1. 接口一致性:客户端始终通过 Target 类型进行交互,代码具有良好的扩展性。
  2. 功能复用:原本因为接口命名或签名不同而难以直接复用的 Adaptee,被无缝集成到了现有架构中。

适配器模式极大地降低了系统耦合度,特别适用于集成遗留代码或第三方库的场景。以上就是 C# 适配器模式的详细内容,更多关于 C# 设计模式优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表