c#设计模式-结构型模式 之适配器模式

🚀介绍

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能 一起工作。
适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现 有组件库中的相关组件的内部结构,所以应用相对较少些。
适配器模式(Adapter)包含以下主要角色:

  1. 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  2. 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
  3. 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者

🚀案例

适配者Adaptee(已经存在,与接口不兼容的类),他有一个SpecificRequest(特殊请求)方法

cs 复制代码
class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("Called SpecificRequest()");
    }
}

我们的目标接口Taget(切口中定义了一个请求方法)

cs 复制代码
interface ITarget
{
    void Request();
}

适配器Adapter,在Adapter中,实现了我们的接口,但是实际上是调用了Adaptee的SpecificRequest方法

cs 复制代码
class Adapter : ITarget
{
    private readonly Adaptee _adaptee;

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

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

然后!我们就可以通过ITarget接口来使用AdapteeSpecificRequest方法了

cs 复制代码
    public static void Main(string[] args)
    {
        ITarget target = new Adapter(new Adaptee());
        target.Request();
    }

🚀优缺点

优点:

  1. 提高了类的复用性:适配器模式可以让两个没有任何关系的类一起运行。
  2. 增加了类的透明性:用户通过适配器可以调用目标接口,适配器对用户来说是透明的,用户并不需要知道适配器的存在。
  3. 提高了类的扩展性:如果想要替换或者增加被适配的类,只需要修改适配器或者增加新的适配器即可,原有代码无需修改,符合"开闭原则"。
  4. 灵活性好:适配器模式提供了一种"即插即用"的方式来适应业务变化,可以很方便地改变数据和对象的表现形式。

缺点:

  1. 过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明可以直接调用的函数,却非要在使用一个适配器,这无疑增加了系统的复杂度。

使用场景:

  1. 系统需要使用现有的类,而这些类的接口不符合系统的需要。
  2. 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
  3. 需要一个统一的输出接口,而输入端的类型不可预知。
相关推荐
Anastasiozzzz4 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
缺点内向5 分钟前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
刘琦沛在进步8 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机19 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经27 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L37 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
喵叔哟44 分钟前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
云姜.1 小时前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法