【设计模式】适配器模式

适配器模式(Adapter Pattern)
概念:

· 一种结构型设计模式;

· 目的是将一个类的接口转换为客户端所期望的接口,使原本不兼容的类可以协同工作;

UML结构:

复制代码
          +----------------+
          |    Target      |   <-- 客户端期望的接口
          |----------------|
          | +Request()     |
          +----------------+
                  ^
                  |  implements
                  |
          +----------------+
          |    Adapter     |   <-- 适配器
          |----------------|
          | -adaptee: Adaptee |
          | +Request()        |
          +----------------+
                  |
          +----------------+
          |   Adaptee      |   <-- 被适配者
          |----------------|
          | +SpecificRequest() |
          +----------------+

代码示例:

cs 复制代码
/// <summary>
/// 客户端希望的接口(目标接口)
/// </summary>
public interface ITarget
{
    void Request();
}

/// <summary>
/// 需要被适配的类
/// </summary>
public class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("Adaptee: SpecificRequest called.");
    }
}

/// <summary>
/// 适配器
/// </summary>
public class Adapter : ITarget
{
    private readonly Adaptee _adaptee;

    public Adapter(Adaptee adaptee)
    {
        this._adaptee = adaptee;
    }

    public void Request()
    {
        _adaptee.SpecificRequest();
    }
}

/// <summary>
/// 客户端
/// </summary>
public class Client
{
    public static void Main()
    {
        // 创建一个需要被适配的对象
        Adaptee adaptee = new();
        // 生成一个适配器对象,并注入被适配的对象
        ITarget target = new Adapter(adaptee);
        // 调用统一接口
        target.Request();
    }
}

特点:
优点:

· 可以让两个原本接口不兼容的

· 符合开闭原则,无需修改已有的类的代码;

· 客户端透明调用 ,无需关心适配器的实现;
缺点:

· 增加系统的复杂度:多了一层适配器;

· 适配器的数量可能会随着类的增加而增加

· 过度使用可能会导致类层次的混乱

适用场景:

· 系统希望使用现有类,但接口不符合需求;

· 需要将多个已有类统一接口 ,便于客户端调用;

· 希望通过封装改变类的接口而不改变原有类;

举例场景

· 为旧版本只支持USB充电的手机适配一个Type-C接口,类似于转接头;

相关推荐
rockey6272 小时前
AScript如何实现中文脚本引擎
c#·.net·script·eval·expression·function·动态脚本
lly2024062 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨3 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9993 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4943 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n3 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨3 小时前
python扫码登录dy
开发语言·python
我是唐青枫3 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
JJay.3 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
bazhange3 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab