适配器模式

github代码仓库

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

UML图如下:

适用性
  • 你想使用一个已存在的类,而它的接口不符合你的需求。

  • 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作

  • 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口,对象适配器可以适配它的父类接口

代码实现

//
// Created by andrew on 2020/11/17.
//#include <iostream>using namespace std;class Current18v {public:virtual void useCurrent18v() = 0;virtual ~Current18v() {}
};class Current220v {public:void useCurrent220v() {cout << "使用 220v" << endl;}
};class Adapter : public Current18v {public:Adapter(Current220v *current) {m_current = current;}virtual void useCurrent18v() {cout << "适配 220v";m_current->useCurrent220v();}private:Current220v *m_current;
};int main(int argc, char *argv[]) {Current220v *current220v = NULL;Adapter *adapter = NULL;current220v = new Current220v;adapter = new Adapter(current220v);adapter->useCurrent18v();delete adapter;delete current220v;return 0;
}

可以看到适配器做的工作就是讲220v的电压,转化为用户需要的18v电压。

23种设计模式C++源码与UML实现--适配器模式相关推荐

  1. 23种设计模式C++源码与UML实现--外观模式

    外观模式 facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种,facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单界面.这个一致的简单的界面被称为fac ...

  2. 23种设计模式C++源码与UML实现--建造者模式

    建造者模式 代码仓库地址:建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程.他把 ...

  3. 23种设计模式C++源码与UML实现--迭代器模式

    迭代器模式 Iterator模式也叫迭代模式,是行为模式之一,他把对容器种包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式. 在使用Iterator模式之前,首先应该 ...

  4. 23种设计模式C++源码与UML实现--命令模式

    命令模式 Command模式也叫命令模式,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数. 在面向对象的程序设计中,一个对象调用另外一个对象 ...

  5. 23种设计模式C++源码与UML实现--原型模式

    原型模式 一个复杂对象,具有自我复制功能,统一一套接口. 原型模式主要面对的问题是:某些结构复杂的对象的创建工作,由于需求的变化,这些对象进场面对着剧烈的变化,但是他们却拥有比较一致的接口. 原型模式 ...

  6. 23种设计模式C++源码与UML实现--桥接模式

    桥接模式 Bridge模式,又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为让类承担不同的责任.它的主要特点是把抽象(Abstractio ...

  7. 23种设计模式C++源码与UML实现--单例模式中的饿汉模式和懒汉模式

    单例模式 单例模式是一种对象创建模式,使用单例模式,可以保证为一个类生成唯一的实例对象.也就是说在这个程序空间该类只有一个实例对象. GoF对单例的定义:保证一个类.只有一个实例存在,同时提供对该实例 ...

  8. 23种设计模式C++源码与UML实现--解释模型

    解释模型 一些应用提供了内建的脚本或者宏语言来让用户可以定义它们能够在系统中进行的操作.Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释 ...

  9. 23种设计模式C++源码与UML实现--状态模式

    状态模式 State模式也叫状态模式,是行为模式的一种,State模式允许通过改变对象的内部状态而改变对象的行为,这个对象变现的好像修改了它的类一样. 状态模式主要解决的事当控制一个对象状态的条件表达 ...

最新文章

  1. pycharm配置远程调试docker
  2. 在VSO8中使用QT
  3. 目标跟踪数据集OTB、VOT下载
  4. char* 大小_SQL Server中char, nchar, varchar和nvarchar数据类型有何区别
  5. SSH Iptables访问控制
  6. 模拟太阳系的html,纯HTML5制作的震撼太阳系网页
  7. Android测试——如何捕获Windows系统的屏幕输入
  8. 使用 jQuery 的 Autocomplete 插件实现input输入提示功能 input 输入模糊提示demo
  9. 周获 4700 Star 全球疫情数据可视化系统,超轻量级中文 OCR……GitHub 一周热点速览...
  10. 大话数据结构读书笔记系列(七)图
  11. Vmware安装red hat linux及VMware tools
  12. Less 官方文档学习笔记
  13. mysql mapinfo_MapInfo常见数据格式
  14. 利用httpclient和多线程刷访问量代码
  15. linux下安装虚拟天文馆,如何在Ubuntu 18.04/17.10/16.04中安装Stellarium 0.17.0 虚拟天文馆...
  16. crmeb v4.4.2 修复前端小程序物流查询有部分查询不出来的问题
  17. 苹果macOS Big Sur 11.2 RC 修复蓝牙和显示连接问题
  18. HTML5期末大作业:影评网站的设计--豆瓣以及IMDb等影评网站
  19. PhotoShop学习历程以及网站分享
  20. 网格顶点法向量从世界坐标到切空间坐标转换:法向贴图高低模烘焙

热门文章

  1. poj 1195(二维树状数组)
  2. windows : Jmeter自动化测试-eclipse+maven+jmeter
  3. ThinkPHP5 相关知识重点笔记
  4. 2017-2018-2 20179202《网络攻防技术》第一周作业
  5. linux ip 转发设置 ip_forward
  6. __block 和 __weak的区别
  7. Kafka之Purgatory Redesign Proposal (翻译)
  8. iOS 序列化与反序列化
  9. self.view = nil 和[self.view release]的区别
  10. [转]游戏中各种性能优化方法(不断更新)