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

C++设计模式6:适配器模式

        适配器模式的主要目的,是让不兼容的接口可以在一起工作,当我们自己的项目接口与一些第三方库的接口不兼容的时候,就需要用到适配器,或者我们自己重构自己的代码,显然后者的代价比较大。

        假如,我们有一种电脑,这个电脑只支持VGA接口,那么它自然而然可以和支持VGA的投影仪一起使用。 

#include<iostream>
using namespace std;
class VGA
{
public:VGA() {}~VGA() {}virtual void  play() = 0;
};
class Type5
{
public:Type5() {}~Type5() {}virtual void  play() = 0;
};
class Computer//只支持VGA接口的电脑
{
public:Computer() {}~Computer() {}void playVideo(VGA *vga){vga->play();}
};
class Video1:public VGA
{
public:Video1() {}~Video1() {}void play(){cout << "play with VGA" << endl;}
};
class Video2 :public Type5
{
public:Video2() {}~Video2() {}void play(){cout << "play with Type5" << endl;}
};
int main()
{Computer computer;computer.playVideo(new Video1());return 0;
}

        那对于支持Type5的投影仪,这台电脑,岂不是不能使用了?

        要解决这个问题,非常简单,只需要加一个转换头就可以了,这个转换头就是我们的适配器。

        

class VGAToType5Adapter:public VGA
{
public:VGAToType5Adapter(Video2* video2) :myvideo(video2){}~VGAToType5Adapter(){delete myvideo;}void play(){myvideo->play();}
private:Video2* myvideo;
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用GitHub Actions的Self-hosted runner
  • leetcode541:反转字符串II
  • io进程----文件io
  • 8月27日,每日信息差
  • 【深度学习】爱因斯坦求和约定
  • STM32 - 笔记3
  • 最新网站服务器CC压力测试系统源码
  • 开源 AI 智能名片 O2O 商城小程序在社交私域中的圈层价值
  • 【卡梅德生物】羊驼单抗定制:从单B细胞筛选到应用
  • Web开发:通过Quatz开启定时任务调度的基础demo
  • 【JVM】垃圾回收算法(一)
  • c++核心编程指南
  • k8s备份etcd3.5
  • jenkins任务中无法执行sudo,管理员操作
  • 分块矩阵的转置
  • angular2开源库收集
  • css的样式优先级
  • Flex布局到底解决了什么问题
  • Intervention/image 图片处理扩展包的安装和使用
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python学习笔记-类对象的信息
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 程序员该如何有效的找工作?
  • 关于使用markdown的方法(引自CSDN教程)
  • 记一次和乔布斯合作最难忘的经历
  • 前端性能优化——回流与重绘
  • 为什么要用IPython/Jupyter?
  • 无服务器化是企业 IT 架构的未来吗?
  • 最简单的无缝轮播
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • FaaS 的简单实践
  • ​iOS安全加固方法及实现
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​业务双活的数据切换思路设计(下)
  • #if 1...#endif
  • #include<初见C语言之指针(5)>
  • $(selector).each()和$.each()的区别
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (C#)获取字符编码的类
  • (C语言)逆序输出字符串
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (含笔试题)深度解析数据在内存中的存储
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (数据结构)顺序表的定义
  • (四) Graphivz 颜色选择
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (五)activiti-modeler 编辑器初步优化
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)我也是一只IT小小鸟
  • ****三次握手和四次挥手
  • ***通过什么方式***网吧
  • .gitignore不生效的解决方案