当前位置: 首页 > news >正文

[C++][设计模式][适配器模式]详细讲解

目录

  • 1.动机
  • 2.模式定义
  • 3.要点总结
  • 4.代码感受


1.动机

  • 在软件系统中,由于应用环境的变化,常常需要将”一些现存的对象“放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足
  • 如何应对这些”迁移的变化“?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?

2.模式定义

  • 定义:将一个类的接口转换成客户希望的另一个接口
  • 功能:Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
  • 结构
    请添加图片描述

3.要点总结

  • Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况"
    • 在遗留代码复用、类库迁移等方面非常有用
  • GoF 23定义了两种Adapter模式的实现结构:对象适配器和类适配器
    • 类适配器采用“多继承"的实现方式,一般不推荐使用
    • 对象适配器采用“对象组合”的方式,更符合松耦合精神
      • 实际运用stackqueuedeque的封装就是一个典型的例子
  • Adapter模式可以实现的非常灵活,不必拘泥于GoF 23中定义的两种结构
    • 例如:完全可以将Adapter模式中的“现存对象“作为新的接口方法参数,来达到适配的目的
  • 优点:可以有效地解决接口的兼容性问题,灵活性强
  • 缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握

4.代码感受

//目标接口(新接口)
class ITarget
{
public:virtual void process() = 0;
};//遗留接口(老接口)
class IAdaptee
{
public:virtual void foo(int data) = 0;virtual int bar() = 0;
};//遗留类型
class OldClass: public IAdaptee
{};//对象适配器 继承
class Adapter: public ITarget
{
protected:IAdaptee* pAdaptee;//组合
public:Adapter(IAdaptee* pAdaptee){this->pAdaptee = pAdaptee;}virtual void process(){int data = pAdaptee->bar();pAdaptee->foo(data);}
};//类适配器 多继承
class Adapter: public ITarget,protected OldClass
{}int main()
{IAdaptee* pAdaptee = new OldClass();ITarget* pTarget = new Adapter(pAdaptee);pTarget->process();
}
http://www.lryc.cn/news/387338.html

相关文章:

  • 8080时序驱动TFT显示屏 驱动IC GC9307
  • K8S 集群节点缩容
  • Web-HTML-事件
  • Installed Build Tools revision xxx is corrupted. Remove and install again 解决
  • AI 与 Python 实战干货:基于深度学习的图像识别
  • 万字长文详解数据结构:树 | 第6章 | Java版大话数据结构 | 二叉树 | 哈夫曼树 | 二叉树遍历 | 构造二叉树 | LeetCode练习
  • NPOI入门指南:轻松操作Excel文件的.NET库
  • 【高性能服务器】服务器概述
  • 003 SSM框架整合
  • web刷题记录(7)
  • 【单片机毕业设计选题24037】-基于STM32的电力系统电力参数无线监控系统
  • Python使用彩虹表来尝试对MD5哈希进行破解
  • 数据恢复篇: 如何在数据丢失后恢复照片
  • c++ 引用第三方库
  • [数据集][目标检测]猪只状态吃喝睡站检测数据集VOC+YOLO格式530张4类别
  • Redis中设置验证码
  • 使用hadoop进行数据分析
  • 架构师篇-7、企业安全架构设计及实践
  • 递归算法~快速排序、归并排序
  • DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手
  • RAG 检索增强生成有效评估
  • Day38:LeedCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
  • sqlalchemy分页查询
  • Java--常用类APl(复习总结)
  • 【股指期权投教】一手股指期权大概多少钱?
  • mmap()函数和munmap()函数的例子
  • 计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)
  • VUE实现简易购物车
  • 混沌工程——从捣乱的视角看系统稳定性
  • Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例