【设计模式】适配器模式

适配器模式(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接口,类似于转接头;

相关推荐
o***Z44821 分钟前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
毕设源码-邱学长33 分钟前
【开题答辩全过程】以 基于Java企业人事工资管理系统为例,包含答辩的问题和答案
java·开发语言
周杰伦fans38 分钟前
C# 正则表达式完全指南
mysql·正则表达式·c#
佛祖让我来巡山1 小时前
设计模式深度解析:策略模式、责任链模式与模板模式
设计模式·责任链模式·策略模式·模版模式
颜*鸣&空1 小时前
QT程序实现串口通信案例
开发语言·qt
无限进步_2 小时前
C语言动态内存的二维抽象:用malloc实现灵活的多维数组
c语言·开发语言·数据结构·git·算法·github·visual studio
froginwe112 小时前
Maven 仓库概述
开发语言
__万波__2 小时前
二十三种设计模式(三)--抽象工厂模式
java·设计模式·抽象工厂模式
转转技术团队2 小时前
VDOM 编年史
前端·设计模式·前端框架