Adapter适配器模式

>>返回《C#常用设计模式》

1. 简介

  1. 概述
    • 将一个类的接口转换成客户希望的另外一个接口。
  2. 解决的问题
    • 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
  3. 适配器模式中的角色
    1. 目标接口(Target):程序调用所期待的接口。目标可以是具体的或抽象的类,也可以是接口;
    2. 需要适配的类(Adaptee):需要被适配的类或适配者类;
    3. 适配器(Adapter):通过包装一个适配两者的对象,将原接口与目标接口适配;
    4. 比喻:好比手机充电,不同的国家使用不同电压的电源,我们手机充电需要不同的适配器来适配电压
      • Adaptee: 家用电源
      • Target: 手机电源接口
      • Adapter: 手机充电器
  4. 适配器模式的类图

    适配接口可采用实现Target接口和继承Adaptee类的方式。

    适配两个类,可采用继承Target类和依赖Adaptee对象的方式

2. 示例


/// <summary>
/// 定义客户端期待的接口
/// </summary>
public class Target
{
    /// <summary>
    /// 使用virtual修饰以便子类可以重写
    /// </summary>
    public virtual void Request()
    {
        Console.WriteLine("This is a common request");
    }
}

/// <summary>
/// 定义需要适配的类
/// </summary>
public class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("This is a special request.");
    }
}

/// <summary>
/// 定义适配器
/// </summary>
public class Adapter:Target
{
    // 建立一个私有的Adeptee对象
    private Adaptee adaptee = new Adaptee();

    /// <summary>
    /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()
    /// </summary>
    public override void Request()
    {
        adaptee.SpecificRequest();
    }
}

//Client代码
class Program
{
    static void Main(string[] args)
    {
        // 对客户端来说,调用的就是Target的Request()
        Target target = new Adapter();
        target.Request();

        Console.Read();
    }
}

3. 说明

  1. 适配器模式是典型的面向抽象设计
  2. 已有的抽象实现弃用,而且有可兼容的封装可以使用,则很适合使用此模式
  3. 比如:sdk更换、数据库访问驱动的更换、数据传输方式的更换等等
posted @   大师兄石头  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-02-16 多线程共享变量和 AsyncLocal
2020-02-16 ExecutionContext(执行上下文)综述
点击右上角即可分享
微信分享提示