常见设计模式解析和实现(C++)Adapt模式

2023-11-13

作用:将一个类的接口转换成客户希望的另一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

 

UML示意图

1)      采用继承原有接口类的方式


 

2)采用组合原有接口类的方式


 

解析:

Adapt模式其实就是把完成同样一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。

实现:

Adapt模式有两种实现的方法,一种是采用继承原有接口的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法

1)  Adapt.h

 

class Target
{
public:
	Target(){}
	virtual ~Target(){}

	virtual void Request() = 0;
};


// 与被Adapt对象提供不兼容接口的类
class Adaptee
{
public:
	Adaptee(){}
	~Adaptee(){}
	void SpecialRequest();
};


// 进行Adapt的类,采用聚合原有接口类的方式
class Adapter : public Target
{
public:
	Adapter(Adapter* pAdaptee);
	virtual ~Adapter();

	virtual void Request();
private:
	Adaptee* m_pAdatee;
};

(2)Adapt.cpp

#include "Adapt.h"
#include <iostream>

void Adaptee::SpecialRequest()
{
	std::cout << "SpecialRequest of Adaptee\n";
}


void Adapter::Adapter(Adaptee *pAdaptee) : m_pAdaptee(pAdaptee)
{
}

Adapter::~Adapter()
{
	delete m_pAdaptee;
	m_pAdaptee = NULL;
}

void Adapter::Request()
{
	std::cout << "Request of Adapter\n";
	m_pAdapter->SpecialRequest();
}


 (3)main.cpp

#include "Adapter.h"
#include "stdlib.h"

int main()
{
	Adaptee *pAdaptee = new Adaptee;
	Target  *pTarget  = new Adapter(pAdaptee);
	pTarget->Request();

	delete pTarget;
	system("pause");
}


 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见设计模式解析和实现(C++)Adapt模式 的相关文章

随机推荐

  • Springboot连接FISCO-BCOS链

    依赖 FISCO BOCS 2 5 0 JAVA 1 8 Spring Boot 2 0 2 官方文档 前期准备 部署FISCO BOCS 2 5 0 引入SDK
  • ue 清理缓存_mpvue应用之组件数据缓存清理

    题图 被mpvue周期搞疯的你 之前介绍过美团外卖C端 H5 小程序页面大量基于mpvue框架的能力 使用Vue组件打通了原生小程序页面和H5页面的隔阂 再结合小程序自带的原生组件功能 就构成了整个外卖跨端应用的终端部分架构 但是随着页面规
  • 唐诗三百首出现最多的字是什么?大数据分析告诉你

    一个人要是长时间一直做一件事 思维容易固化 就像那些从太空回来的宇航员 吃饭时容易丢开拿在手里的勺子 当勺子掉在地上时 哦 我已经回到地球了 所以 适当尝试新鲜事物 既是对大脑的放松 也是开阔思路的好机会 好方法 那这次 博主尝试的新事物是
  • 腾讯面经 集合

    腾讯机器学习复试 gbtd和xgboost区别和优缺点 XGBoost是GBDT一个工程化的实现 第一 GBDT将目标函数泰勒展开到一阶 而xgboost将目标函数泰勒展开到了二阶 使用泰勒展开到二阶的原因 统一损失函数求导的形式以支持自定
  • CFLAGS详解

    Makefile选项CFLAGS LDFLAGS LIBS CFLAGS 表示用于 C 编译器的选项 CXXFLAGS 表示用于 C 编译器的选项 这两个变量实际上涵盖了编译和汇编两个步骤 CFLAGS 指定头文件 h文件 的路径 如 CF
  • XXXXXXXXXXXXX

    Netflix主机性能监视工具Vector http www chinaz com web 2015 0414 398451 shtml 云雀科技是总部位于西雅图的新兴的云服务公司 利用业界 最新技术打造下一代具有高密度动态计算能力的云平台
  • 初学网络安全不可不知的:10款开源安全工具

    随着互联网的不断发展 安全问题也越来越受到企业的重视 但安全问题往往需要大量资金的投入 例如聘请安全工程师 产品研发 测试等流程 这对于那些原本就资金紧缺的企业而言 是绝对无法接受的 因此 为了减少在这方面的资金投入 许多安全人员都会选择使
  • keyframes介绍与调用动画方法

    keyframes介绍 keyframes changecolor 0 background red 50 background red 100 background green 在一个 keyframes 中的样式规则可以由多个百分比构成
  • APB总线详解及手撕代码

    本文的参考资料为官方文档AMBA 3 APB Protocol specification 文档下载地址 https pan baidu com s 1Vsj4RdyCLan6jE quAsEuw pwd w5bi 提取码 w5bi APB
  • Spring Bean如何保证并发安全

    1 可以设置Bean的作用域为原型 这样每次从容器中获取到的Bean就是一个新的实例 避免了多线程共享同一个对象实例的问题 2 不改变Bean作用域的情况下 可以避免在Bean中存可变状态的声明 尽量使用局部变量或使用线程安全的数据结构 3
  • Visual Station 2022的头文件包含目录设置的区别

    1 前言 对vs的包含头文件的组织 你困惑吗 困惑 有点困惑 BullS 在没喊出 BullSHI 之前 我先查了很多博客 结果 有的说 VC Directories gt Include Directories 适用于当前项目 C C g
  • BUUCTF [ACTF2020 新生赛]Exec

    1 刚打开的时候如图所示 先随便用一个地址127 0 0 1 2 然后查下目录127 0 0 1 ls ls看文件目录 发现flag 直接抓127 0 0 1 cat flag 拿到flag flag fdc896b1 e032 4e87
  • 如何训练自己的tokenizer

    训练自己的 tokenizer 通常需要以下几个步骤 准备数据 选择一些文本数据作为训练数据 并将其按照一定的方式拆分成若干个 token 例如将句子按照空格拆分成单词 选择模型 选择一种适合你的任务的模型 例如基于字符的模型或基于单词的模
  • electron 生成 arm64 的包

    vue electron https blog csdn net qq1195566313 article details 131713875 打包配置修改如下 electronBuilder build config appId com
  • 目标检测-YOLOv7代码及训练

    目录 论文及代码下载 代码结构 代码学习 1 train py 1 1 参数 1 2 Resume 训练中断后继续训练 1 3 Train 训练 2 yolov7 yaml 2 1 parameters and anchors 2 2 网络
  • 阿姆达尔定律

    原文地址 作者 Jakob Jenkov 译者 张坤 阿姆达尔定律可以用来计算处理器平行运算之后效率提升的能力 阿姆达尔定律因Gene Amdal 在1967年提出这个定律而得名 绝大多数使用并行或并发系统的开发者有一种并发或并行可能会带来
  • HDFS RBF的Connection管理

    文章目录 前言 Connection管理的权衡问题 RBF的Connection管理 细粒度的Connection Pool划分 Connection的创建 Connection的清理 参考资料 前言 为了解决HDFS Federation
  • Java-常量池

    Java 常量池 常量池是类文件中最复杂的数据结构 对于JVM字节码来说 如果操作数是很常用的数字 比如 0 这些操作数是内嵌到字节码中的 如果是字符串常量和较大的整数等 Class文件则会把这些操作数存储到常量池中 当使用这些操作数时 会
  • 快速傅氏变换之旅(二) 七种FFT算法速度比较(含代码)

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 编译工具 VS2005 http www rayfile com zh cn files 76968e5e 7bde 11e1 8c13 00
  • 常见设计模式解析和实现(C++)Adapt模式

    作用 将一个类的接口转换成客户希望的另一个接口 Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 UML示意图 1 采用继承原有接口类的方式 2 采用组合原有接口类的方式 解析 Adapt模式其实就是把完成同样一个功能