C++ 适配器模式解析

适配器模式概念

  • 将一个类的接口,转换成客户端期望的另一个接口。适配器让原先接口不兼容的类可以合作无间。

适配器实例

  • 最简单的示例就是常规3.5mm耳机插入苹果7以上的手机,需要转接头的需求。

    很明显来说,转接头需要能继承于3.5mm耳机,正面又得是苹果耳机的头,这就涉及到继承问题,即转接头首先得继承于正常耳机,后面插入的方式得是苹果耳机方式。

    用适配器模式来表达就很好表达

头文件:

定义正常耳机,插槽 转接头的关系

#include "stdafx.h"//3.5mm 耳机
class MicroEarPhone
{
public:virtual void enterMethod(); //插孔方式
};//苹果插槽
class IPhoneSlot
{
public:virtual void beEnterMethod();
};//耳机转接头
//首先需要后面能被3.5mm耳机插,需要继承
class EarphoneAdapter:public MicroEarPhone
{
public:EarphoneAdapter(IPhoneSlot * cur_slot);virtual void enterMethod();
private:IPhoneSlot* m_IPhone;
};

接下来是实现

//适配器模式实例
//苹果#include "stdafx.h"
#include "AdapterMode.h"
using namespace std;void MicroEarPhone::enterMethod()
{cout << "这是3.5mm耳机" << endl;
}void IPhoneSlot::beEnterMethod()
{cout << "苹果7的耳机孔" << endl;
}EarphoneAdapter::EarphoneAdapter(IPhoneSlot * cur_slot)
{m_IPhone = cur_slot;
}void EarphoneAdapter::enterMethod()
{MicroEarPhone::enterMethod();cout << "使用转接头" << endl;m_IPhone->beEnterMethod();//然后进入正常转接
}int _tmain(int argc, _TCHAR* argv[])
{IPhoneSlot * cur_iphone = new IPhoneSlot();MicroEarPhone * cur_ear = new EarphoneAdapter(cur_iphone);cur_ear->enterMethod();delete cur_ear;delete cur_iphone;system("pause");return 0;
}

运行结果:

所以很容易的看出实现了适配器模式。

C++设计模式详解之适配者模式解析相关推荐

  1. C++设计模式详解之装饰者模式解析

    装饰者模式的概念 装饰者模式指的是动态的将责任附加到对象上,想要扩展其功能,装饰者提供有别于继承的另一种选择.(参考<Head First 设计模式>) 个人理解:装饰者就是一种类包类 就 ...

  2. C++设计模式详解之抽象工厂模式解析

    抽象工厂模式概念 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 抽象工厂模式实例 以组装电脑为例,一般来说,电脑组装都不可能是一家公司的零件,简单的来说,显卡就有NVIDIA和A ...

  3. 《设计模式详解》结构型模式 - 适配器模式

    适配器模式 5.2 适配器模式 5.2.1 概述 5.2.2 结构 5.2.3 类适配器模式 5.2.4 对象适配器模式 5.2.5 接口适配器模式 5.2.6 应用场景 5.2.7 JDK 源码 - ...

  4. 《设计模式详解》行为型模式 - 解释器模式

    解释器模式 6.11 解释器模式 6.11.1 概述 6.11.2 结构 6.11.3 案例实现 6.11.4 优缺点 6.11.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢 ...

  5. 《设计模式详解》行为型模式 - 备忘录模式

    备忘录模式 6.10 备忘录模式 6.10.1 概述 6.10.2 结构 6.10.3 案例实现 "白箱" 备忘录模式 "黑箱" 备忘录模式 6.10.4 优缺 ...

  6. 《设计模式详解》行为型模式 - 中介者模式

    中介者模式 6.7 中介者模式 6.7.1 概述 6.7.2 结构 6.7.3 案例实现 6.7.4 优缺点 6.7.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 6 ...

  7. 《设计模式详解》行为型模式 - 观察者模式

    观察者模式 6.6 观察者模式 6.6.1 概述 6.6.2 结构 6.6.3 案例实现 6.6.4 优缺点 6.6.5 使用场景 6.6.6 JDK 提供的实现 - Observable 示例 完整 ...

  8. 《设计模式详解》行为型模式 - 状态模式

    状态模式 6.5 状态模式 6.5.1 反例 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 行为型 ...

  9. 《设计模式详解》行为型模式 - 职责链模式

    职责链模式 6.4 职责链模式 6.4.1 概述 6.4.2 结构 6.4.3 案例实现 6.4.4 优缺点 6.4.5 JavaWeb 源码 - FilterChain 完整的笔记目录:<设计 ...

最新文章

  1. leetcode题解:Construct Binary Tree from Preorder and Inorder Traversal (根据前序和中序遍历构造二叉树)...
  2. html经过一段时间自动交换图像,Dreamweaver交换行为:实现图像交换
  3. 解决python 保存json到文件时 中文显示16进制编码的问题
  4. JS经典面试题05-变量连续声明var a = b = 1
  5. 内网转外网方法 Sunny-Ngrok
  6. Bootstrap Well 组件
  7. python绘制简单城市剪影图_Python之绘制个人足迹地图
  8. Oracle 创建表空间与用户
  9. APM应用性能管理的过去二十年
  10. java发牌程序_求解,用JAVA写洗牌与发牌模拟程序
  11. 放弃 Google 搜索引擎,Firefox 欲用必应替代?
  12. python 对象是什么概念
  13. Dotfuscator 混淆器混淆的我都糊涂啦
  14. c语言jt808协议库,部标JTT808协议快速开发包
  15. java计算机毕业设计农田节水灌溉监测系统源码+程序+lw文档+mysql数据库
  16. Vmware虚拟机文件复制及改名称方法
  17. oracle可恢复的等待,【案例】Oracle RAC恢复报错RMAN-06004 RMAN-20003解决办法笔记
  18. qq 登陆界面怎么测试
  19. 标识符(含义、组成、定义规则、命名规范)
  20. META是什么意思?

热门文章

  1. 细节打满,IO 操作必须手动关闭?关闭流方法是否有顺序?
  2. 开发一个大型后台管理系统,真的需要用前后端分离的技术方案吗?
  3. Java多线程学习三:有哪几种实现生产者消费者模式的方法
  4. 12最后一个正式版_玩机体验:iOS14.3正式版更新了哪些内容,是否值得升级?
  5. Using Apache Solr‘s boost query function with Spring in Java
  6. golang切片类型
  7. windows x64 软件约定
  8. C#实现两个时间相减的方法
  9. 输入班级人数,根据人数,挨个输入成绩,求平均分,求最高分最低分
  10. NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目