.NET高级面试指南专题二十六【适配器模式介绍,用于将一个类的接口转换成客户端所期待的另一个接口】

适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期待的另一个接口,使得原本由于接口不兼容而不能在一起工作的类能够协同工作。这种模式通常用于软件系统的升级和重构中,可以使得原有的代码能够与新的接口相兼容,同时不改变原有代码的情况下实现功能的更新和扩展。

优点:

  • 解耦性增强:适配器模式可以将客户端与目标类解耦,客户端只需要与- 适配器进行交互,而不需要了解具体的目标类。
  • 复用性提高:可以重用已有的类,而不需要修改其源代码,只需要实现一个适配器类即可。
  • 灵活性增强:可以通过不同的适配器实现不同的适配功能,从而满足不同的需求。

缺点:

  • 增加复杂度:引入适配器会增加代码的复杂度,因为需要额外的类来实现适配器。
  • 可能性能损失:适配器的存在可能会引入一定的性能损失,尤其是在处理大量数据时。

适用场景:

  • 当需要使用一个已经存在的类,但是其接口与所需接口不兼容时。
  • 当需要创建一个可复用的类,该类能够与多个不兼容的接口一起工作时。
  • 当希望通过某个类来间接地调用另一个类的方法,而且不想直接引用该类的方法时。

假设有一个旧的接口 IOldInterface,而客户端希望使用新的接口 INewInterface,但两者的方法不兼容,可以通过适配器模式来解决:

csharp 复制代码
// 旧的接口
public interface IOldInterface
{
    void OldMethod();
}

// 新的接口
public interface INewInterface
{
    void NewMethod();
}

// 旧接口的实现类
public class OldClass : IOldInterface
{
    public void OldMethod()
    {
        Console.WriteLine("Old method is called");
    }
}

// 适配器类,将旧的接口适配成新的接口
public class Adapter : INewInterface
{
    private readonly IOldInterface _oldClass;

    public Adapter(IOldInterface oldClass)
    {
        _oldClass = oldClass;
    }

    public void NewMethod()
    {
        // 在新方法中调用旧接口的方法
        _oldClass.OldMethod();
    }
}

// 客户端代码
class Program
{
    static void Main(string[] args)
    {
        // 创建旧接口的实例
        IOldInterface oldClass = new OldClass();

        // 创建适配器,将旧接口适配成新接口
        INewInterface adapter = new Adapter(oldClass);

        // 客户端调用新接口的方法
        adapter.NewMethod(); // 实际上调用的是旧接口的方法
    }
}

Adapter 类充当了适配器的角色,将旧接口 IOldInterface 适配成了新接口 INewInterface,使得客户端可以通过调用新接口的方法来间接调用旧接口的方法。

相关推荐
那我掉的头发算什么14 分钟前
【面试八股】一篇文章讲清楚JVM面试常考
jvm·面试·职场和发展·java虚拟机
乔代码嘚15 分钟前
2026 AI大模型全套资料免费领!30天从入门到架构部署,附面试真题与行业报告
人工智能·语言模型·面试·大模型·产品经理·ai大模型·大模型学习
冬天vs不冷15 分钟前
面试必知必会(13):MySQL锁机制
mysql·面试·职场和发展
华夏之光永存15 分钟前
独家:国家级光刻机项目架构师面试对话实录
面试·职场和发展
冬天vs不冷15 分钟前
面试必知必会(14):MySQL执行计划与SQL优化
sql·mysql·面试
草莓熊Lotso15 分钟前
《告别 “会用不会讲”:C++ string 底层原理拆解 + 手撕实现,面试 / 开发都适用》
开发语言·c++·面试
KNeeg_16 分钟前
黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐
java·redis·后端·spring·面试·职场和发展·黑马点评
FPGA小迷弟17 分钟前
FPGA工程师常见面试问题,有参考答案,必学!!!
fpga开发·面试·职场和发展·verilog·fpga·modelsim
Java后端的Ai之路17 分钟前
以为AI开发就是调接口?一场25K的面试让我看到真相,原来真正的技术深度在这!
人工智能·面试·职场和发展·agent·ai应用开发
「已注销」18 分钟前
面试分享:二本靠7轮面试成功拿下大厂P6
前端·javascript·面试