C++设计模式详解之适配者模式解析
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++设计模式详解之适配者模式解析相关推荐
- C++设计模式详解之装饰者模式解析
装饰者模式的概念 装饰者模式指的是动态的将责任附加到对象上,想要扩展其功能,装饰者提供有别于继承的另一种选择.(参考<Head First 设计模式>) 个人理解:装饰者就是一种类包类 就 ...
- C++设计模式详解之抽象工厂模式解析
抽象工厂模式概念 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 抽象工厂模式实例 以组装电脑为例,一般来说,电脑组装都不可能是一家公司的零件,简单的来说,显卡就有NVIDIA和A ...
- 《设计模式详解》结构型模式 - 适配器模式
适配器模式 5.2 适配器模式 5.2.1 概述 5.2.2 结构 5.2.3 类适配器模式 5.2.4 对象适配器模式 5.2.5 接口适配器模式 5.2.6 应用场景 5.2.7 JDK 源码 - ...
- 《设计模式详解》行为型模式 - 解释器模式
解释器模式 6.11 解释器模式 6.11.1 概述 6.11.2 结构 6.11.3 案例实现 6.11.4 优缺点 6.11.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢 ...
- 《设计模式详解》行为型模式 - 备忘录模式
备忘录模式 6.10 备忘录模式 6.10.1 概述 6.10.2 结构 6.10.3 案例实现 "白箱" 备忘录模式 "黑箱" 备忘录模式 6.10.4 优缺 ...
- 《设计模式详解》行为型模式 - 中介者模式
中介者模式 6.7 中介者模式 6.7.1 概述 6.7.2 结构 6.7.3 案例实现 6.7.4 优缺点 6.7.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 6 ...
- 《设计模式详解》行为型模式 - 观察者模式
观察者模式 6.6 观察者模式 6.6.1 概述 6.6.2 结构 6.6.3 案例实现 6.6.4 优缺点 6.6.5 使用场景 6.6.6 JDK 提供的实现 - Observable 示例 完整 ...
- 《设计模式详解》行为型模式 - 状态模式
状态模式 6.5 状态模式 6.5.1 反例 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 行为型 ...
- 《设计模式详解》行为型模式 - 职责链模式
职责链模式 6.4 职责链模式 6.4.1 概述 6.4.2 结构 6.4.3 案例实现 6.4.4 优缺点 6.4.5 JavaWeb 源码 - FilterChain 完整的笔记目录:<设计 ...
最新文章
- leetcode题解:Construct Binary Tree from Preorder and Inorder Traversal (根据前序和中序遍历构造二叉树)...
- html经过一段时间自动交换图像,Dreamweaver交换行为:实现图像交换
- 解决python 保存json到文件时 中文显示16进制编码的问题
- JS经典面试题05-变量连续声明var a = b = 1
- 内网转外网方法 Sunny-Ngrok
- Bootstrap Well 组件
- python绘制简单城市剪影图_Python之绘制个人足迹地图
- Oracle 创建表空间与用户
- APM应用性能管理的过去二十年
- java发牌程序_求解,用JAVA写洗牌与发牌模拟程序
- 放弃 Google 搜索引擎,Firefox 欲用必应替代?
- python 对象是什么概念
- Dotfuscator 混淆器混淆的我都糊涂啦
- c语言jt808协议库,部标JTT808协议快速开发包
- java计算机毕业设计农田节水灌溉监测系统源码+程序+lw文档+mysql数据库
- Vmware虚拟机文件复制及改名称方法
- oracle可恢复的等待,【案例】Oracle RAC恢复报错RMAN-06004 RMAN-20003解决办法笔记
- qq 登陆界面怎么测试
- 标识符(含义、组成、定义规则、命名规范)
- META是什么意思?
热门文章
- 细节打满,IO 操作必须手动关闭?关闭流方法是否有顺序?
- 开发一个大型后台管理系统,真的需要用前后端分离的技术方案吗?
- Java多线程学习三:有哪几种实现生产者消费者模式的方法
- 12最后一个正式版_玩机体验:iOS14.3正式版更新了哪些内容,是否值得升级?
- Using Apache Solr‘s boost query function with Spring in Java
- golang切片类型
- windows x64 软件约定
- C#实现两个时间相减的方法
- 输入班级人数,根据人数,挨个输入成绩,求平均分,求最高分最低分
- NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目