设计模式——适配器

这篇具有很好参考价值的文章主要介绍了设计模式——适配器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、引言

说起适配器,大家第一个想到的可能就是电源适配器。
电源适配器的作用想必同学们也都清楚,那就是将220伏高电压转换成想要的5伏至20伏左右稳定的低电压。
从某种程度上讲,编程中经常提起的适配器模式的原理与上面讲到的基本是一致的。

2、什么是适配器模式

用于将一个类的接口转换成另一个客户端所期望的接口形式。
适配器模式使得原本由于接口不兼容而无法一起工作的类可以协同工作。
通常的话,我们会在以下几种场景中使用到它。

  1. 对已存在的类库进行封装和适配,以便能够与其他新的系统或框架协同工作。
  2. 在不修改现有代码的情况下,适配新的接口规范。
  3. 在使用第三方组件时,适配器可以将其接口转换成自定义的接口形式。
  4. 将多个类或接口进行统一的适配,使得它们之间可以互相替换。

举个例子,大家在实际项目中使用第三方组件时,都会存在第三方组件设计的接口与项目实际使用的接口不一致,无法直接调用的情况。
这种场景下,我们通常会声明一个类对第三方接口进行封装,提供项目需要的接口。
以sqlite为例,sqlite只提供了C风格的接口,因此我们可以通过SqliteWrapper类来进行C++风格的封装。

class SqliteWrapper {
 private:
  sqlite3* m_conn;
  uint32_t m_retry;
  uint32_t m_timeout;
  sqlite3_stmt* m_stmt;

  std::string errStr;
  int errCode;

 public:
  SqliteWrapper(uint32_t retry, uint32_t timeout);

  virtual ~SqliteWrapper() { Close(); }

  virtual SQLErr Open(std::string& dbName, std::string& user, std::string& pass,
                      std::string& port);
  virtual SQLErr Close();
  virtual SQLErr Begin();
  virtual SQLErr Commit();
  virtual SQLErr RollBack();
  virtual SQLErr PrepareStatement(std::string& sql);
  virtual SQLErr Execute();
  virtual SQLErr Next();
  virtual SQLErr Statement(std::string& sql);
  virtual int GetLastError(std::string& err);

  void SetLastError(int action, const char* err);
  void SetLastError(int action);
  void ClearLastError();
};
  • 类适配器
    通过多重继承来适配接口。适配器类继承目标接口,并且同时继承了需要适配的类或接口。
  • 对象适配器
    通过组合关系来适配接口。适配器类持有适配者对象,并实现目标接口,将原始接口的调用委托给适配者对象。
  • 接口适配器(Interface Adapter):
    接口适配器也称为缺省适配器或者抽象适配器。
    接口适配器通过定义一个抽象适配器类,该类实现了目标接口并提供了默认空实现。
    其他具体适配器类可以选择性地覆盖抽象适配器类的方法来完成适配。
    接口适配器主要用于解决目标接口较多,但实际只需要使用其中部分方法的情况。

3、优缺点

  • 优点:
    1) 提供了一种解耦的方式,使得原本不兼容的类可以独立演化。
    2)可以复用已存在的类,实现了类的复用。
    3)可以在不修改已有代码的情况下进行接口的转换和适配。

  • 缺点:
    1)引入适配器类会增加代码的复杂性,使代码变得难以理解。
    2)不适合频繁变化的接口。如果接口经常发生变化,那么适配器的维护成本可能会很高,因为需要不断更新适配器以适应接口的变化。
    3)适配器模式可以弥补接口不匹配的问题,但有时也可能隐藏了系统设计上的问题。文章来源地址https://www.toymoban.com/news/detail-531100.html

4、装饰器与适配器的区别

装饰者模式 适配器模式
定义 装饰者和被装饰者都实现同一个接口,主要目的是为了拓展之后依旧保持OOP关系 适配器和被适配者没有必然的联系,通常采用代理的形式进行包装
关系 满足 is-a 的关系 满足 has-a 的关系
功能 注重覆盖、扩展 注重兼容、转换
设计 前置考虑 后置考虑

到了这里,关于设计模式——适配器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式 06 适配器模式

    适配器模式(Adapter Pattern)属于 结构型 模式 结构型 模式关注如何将现有的类或对象组织在一起形成更加强大的结构。 在生活中,我们经常遇到这样的一个问题:轻薄笔记本通常只有 type-c 或者 usb-a 接口,没有网口。但日常使用中是往往需要连接网口上网的,这时想到的第

    2024年02月11日
    浏览(41)
  • 设计模式-- 3.适配器模式

    将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 请求者(client):客户端角色,需要使用适配器的对象,不需要关心适配器内部的实现,只对接目标角色。 目标角色(Target):目标角色,和client直接对接,定义

    2024年01月18日
    浏览(63)
  • 设计模式四:适配器模式

    1、适配器模式的理解 适配器模式可以理解为有两个现成的类Adaptee和Target,它们两个是不能动的,要求必须使用B这个类来实现一个功能,但是A的内容是能复用的,这个时候我们需要编写一个转换器 适配器模式 Adaptee:被适配者,现有的接口或者类; Adapter:适配器类,适配器

    2024年02月22日
    浏览(47)
  • 适配器设计模式

    一、适配器模式 B站:java架构师 定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 三种适配器:类的适配器模式、对象的适配器模式、接口的适配器模式 1.类适配器模式 实现方式:让

    2024年02月11日
    浏览(50)
  • 设计模式——适配器

    说起适配器,大家第一个想到的可能就是电源适配器。 电源适配器的作用想必同学们也都清楚,那就是将220伏高电压转换成想要的5伏至20伏左右稳定的低电压。 从某种程度上讲,编程中经常提起的适配器模式的原理与上面讲到的基本是一致的。 用于将一个类的接口转换成另

    2024年02月12日
    浏览(53)
  • 【设计模式】使用适配器模式做补偿设计

    适配器模式是一种 结构型设计模式 ,它提供了一个中间层,通过这个中间层,客户端可以使用统一的接口与具有不同接口的类进行交互,也就是说,将一个接口转换成客户期望的另一个接口,使得原本不兼容的接口能够协同工作。 举个现实中的例子,我们现在的很多轻薄笔

    2024年02月22日
    浏览(43)
  • 设计模式-适配器模式 Adapter

    适配器设计模式(Adapter Design Pattern)是一种结构型设计模式,用于 解决两个不兼容接口之间的问题 。适配器允许 将一个类的接口转换为客户端期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。 在适配器设计模式中,主要包含以下四个角色:

    2024年02月19日
    浏览(42)
  • 【设计模式】适配器模式怎么理解?

    什么是转换器模式? 转换器模式是一种结构型设计模式, 主要用于在两种不同类型的对象之间进行转换,而不需要改变原型的实际逻辑。这是一种在软件设计中经常使用的模式 ,它有助于保持代码的整洁和组织。在软件开发中,我们经常会遇到在不同层之间转换对象的需求

    2024年01月25日
    浏览(50)
  • Java 设计模式——适配器模式

    (1)如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使

    2024年02月16日
    浏览(54)
  • js设计模式:适配器模式

    可以将某种不同格式的数据转化为自己所期待的数据格式 或者对于一些存在兼容或者特殊处理的业务逻辑,可以进行一个适配

    2024年02月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包