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

(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录

1、适配器模式(Adapter Pattern)含义

2、适配器模式应用场景

3、适配器模式的UML图学习

4、C++实现适配器模式的示例


1、适配器模式(Adapter Pattern)含义

将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作;

适配器模式通常用于将不兼容的类组合在一起工作,或将旧代码与新代码集成在一起。

适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。

IT世界有句俗语:没有什么问题是加一层不能解决的

2、适配器模式应用场景

(1)当需要使用一个现存的类,但它提供的接口与我们系统的接口不兼容,而我们还不能修改它时;

(2)当多个团队独立开发系统的各功能模块,然后组合在一起,但由于某些原因事先不能确定接口时。

3、适配器模式的UML图学习

适配器模式有3个角色:

(1)Target:是一个接口,是客户端使用的目标接口;

(2)Adaptee:是我们想要的接口,与Target不兼容的类,这个可以是一个接口或类;

(3)Adapter:适配器类,此模式的核心。它需要实现目标接口Target,而且必须引用Adaptee,因为我们要在此类包装Adaptee的功能;

4、C++实现适配器模式的示例


#include <iostream>
#include <string>// 目标接口
class Target 
{
public:virtual void request() const = 0;
};// 源接口
class Adaptee 
{
public:void specificRequest() const {std::cout << "Adaptee: specificRequest" << std::endl;}
};// 类适配器
class Adapter : public Target, private Adaptee 
{
public:void request() const override {specificRequest();}
};int main() 
{// 使用适配器调用目标接口Target* target = new Adapter();target->request();delete target;return 0;
}

在上述示例中,我们首先定义了目标接口(Target),其中包含了一个纯虚函数request()。然后,我们定义了源接口(Adaptee),其中包含了一个具体函数specificRequest()

接着,我们通过类适配器的方式实现了适配器类(Adapter),它继承自目标接口,并私有继承源接口。在适配器类中,我们实现了目标接口的纯虚函数,内部调用了源接口的具体函数。

在主函数中,我们创建了一个适配器对象,并通过目标接口调用了适配器的request()函数。由于适配器类同时继承了目标接口和源接口,所以在调用request()函数时,实际上会调用到适配器类中的具体函数。

http://www.lryc.cn/news/127967.html

相关文章:

  • 【编程二三事】ES究竟是个啥?
  • 爬虫逆向实战(三)--天某云登录
  • 不要过于迷恋软件架构,要重视如何设计根据简单和清晰的设计
  • Grafana监控 Redis Cluster
  • k8s 认证和权限控制
  • 性能优化的重要性
  • Leetcode No.53 Maximum Subarray
  • 手机出现 不读卡 / 无信号时应该怎么办?
  • Linux 内核模块运行机制(10/11)
  • MySQL数据库-字符串函数详解
  • 半导体退火那些事(3)
  • 1281. 整数的各位积和之差
  • 如何使用Vue和C++实现OJ《从零开始打造 Online Judge》
  • 在Spring Boot和Vue中实现请求过滤器以验证请求头中的Token
  • ThreeJS——在3D地球上标记中国地图板块
  • 第2章 性能测量
  • 未来,运营的重要性大于产品?
  • paddle ocr框架识别数字问题和解决方案
  • 构建高性能的MongoDB数据迁移工具:Java的开发实践
  • 2023年国赛数学建模思路 - 案例:最短时间生产计划安排
  • 1572. 矩阵对角线元素的和
  • 在vue中使用swiper轮播图(搭配watch和$nextTick())
  • Java书签 #使用MyBatis接入多数据源
  • 神经网络基础-神经网络补充概念-23-神经网络的梯度下降法
  • 鸿蒙3.1 设备管理DeviceManager
  • Git 目录详解
  • 基于springboot+vue的武汉旅游网(前后端分离)
  • 步入React正殿 - React组件设计模式
  • Java 单例模式简单介绍
  • 根据源码,模拟实现 RabbitMQ - 从需求分析到实现核心类(1)