适配器模式C++实现

2023-05-16

本文共916个字,预计阅读时间需要3分钟。

简介

适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作

适配器模式的别名为包装器(Wrapper)模式,它既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合。

结构:

客户端使用的Target类需要使用一个已经存在的接口Adaptee类,可以用两种方法实现:
1、构造Adapter类继承Target类,并实现Adaptee接口(适配器模式的类版本)
2、将一个Adaptee实例作为Adapter的组成部分(适配器模式的对象版本)
类适配器模式结构图:
在这里插入图片描述
对象适配器结构图:

在这里插入图片描述

适配器模式的适用性:

想使用一个已经存在的类,但它的接口不符合需求。
想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

实例

分别利用类版本和对象版本的适配器模式模拟实现ps2接口和usb接口的转换。

我们手中有个ps2插头的设备,但是主机上只有usb插头的接口,实现一个适配器将ps2接口转换为usb接口。其中,ps2接口表示为:

class Ps2{
virtual void isPs2();
}
 
class Usb{
Virtual void isusb();
}

实验UML图
在这里插入图片描述
在这里插入图片描述

代码

target为:usb
Adaptee为:Ps2
Adapter类公有继承target,私有继承Adaptee

类适配器模式代码
#include<iostream>
using namespace std;
 
 
/*
分别利用类版本和对象版本的适配器模式模拟实现ps2接口和usb接口的转换。
我们手中有个ps2插头的设备,但是主机上只有usb插头的接口,实现一个适配器将ps2接口转换为usb接口。其中,ps2接口表示为:
class Ps2{
    virtual void isPs2();
}
Usb接口表示为:
class Usb{
    Virtual void isusb();
}。
*/
 
 
class Usb{ //target
public:
    virtual void isusb(){
        cout<<"USB接口"<<endl;
    };
};
 
class Ps2{ //adaptee
public:
    void isPs2(){
        cout<<"Ps2"<<endl;
    };
};
 
class Adapter: public Usb, private Ps2{
    void isusb(){
        isPs2();
    }
};
 
 
 
int main(){
    Usb* usb = new Adapter();
    usb->isusb();
    return 0;
}
对象适配器代码
#include<iostream>
 
using namespace std;
 
class Ps2{ //adaptee
public:
    void isPs2(){
        cout<<"Ps2"<<endl;
    };
};
 
class Usb{ //target
public:
    virtual void isusb(){
        cout<<"USB接口"<<endl;
    };
};
 
class Adapter: public Usb{
public:
    void isusb(){
        ps2->isPs2();
    }
private:
    Ps2 * ps2 = new Ps2();
};
 
int main(){
    Usb* usb = new Adapter();
    usb->isusb();
    return 0;
}

两个均调用的为SpecificRequest();

总结

①本次实验掌握并编码了适配器模式的类与对象的两种不同方法。

②在实现类适配器和对象适配器时,注意,对象适配器模式中的“目标接口”和“适配者类”的代码同类适配器模式一样,只要修改适配器类和客户端的代码即可。

更多内容访问 omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处

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

适配器模式C++实现 的相关文章

  • 适配器模式C++实现

    本文共916个字 xff0c 预计阅读时间需要3分钟 简介 适配器模式 xff1a 将一个类的接口转换成客户希望的另一个接口 适配器模式让那些接口不兼容的类可以一起工作 适配器模式的别名为包装器 Wrapper 模式 xff0c 它既可以作
  • Android设计模式—适配器模式★★★

    1 适配器模式 适配器模式是指把一个类的接口变换成客户端所期待的另一种接口 xff0c 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 适配器模式是为了解决接口不兼容问题的 比如厂商给你的接口和你现有的接口对接不起来 旧的数据
  • 适配器模式

    模式的结构与实现 类适配器模式可采用多重继承方式实现 xff0c 如 C 43 43 可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口 xff1b Java 不支持多继承 xff0c 但可以定义一个适配器类来实
  • C++设计模式之适配器模式(adapter)(结构型)

    一 结构型模式概述 结构型模式 Structural Pattern 描述如何将类或者对象结合在一起形成更大的结构 就像搭积木 可以通过简单积木的组合形成复杂的 功能更为强大的结构 结构型模式可以分为类结构型模式和对象结构型模式 类结构型模
  • Java中的适配器模式(Adapter Pattern)

    Java中的适配器模式 Adapter Pattern 简介 适配器模式 Adapter Pattern 是一种常用的设计模式 用于将一个类的接口转换成客户端所期望的另一个接口 在Java中 适配器模式可以帮助我们解决不兼容接口之间的问题
  • 适配器Adapter

    1 意图 将一个类的接口转换成客户希望的另外一个接口 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 2 结构 类适配器结构图 对象适配器结构图 类适配器使用多重继承对一个接口与另一个接口进行匹配 对象适配器依赖
  • 设计模式浅析-适配器模式

    前言 2017年悄悄的来了 无声无息的以至于我都还没好好缅怀一下荒诞的2016 不得不说 2016没能通过努力达到应该有的程度 看样子目标还是要有的 那就先设定一个小目标吧 设计模式 当你学会了设计模式 就要忘记设计模式 辉哥 适配器模式
  • 适配器模式和装饰器模式区别

    适配器模式和装饰器模式都可以在原类文件方法的基础上修改 增强 但侧重点不一样 适配器模式重在将一个接口转换为另一个接口 装饰器模式侧重对原类文件方法的增强 但接口还是同一个接口 适配器模式 适配器模式 解决原类文件 适配者 和现有需求 目标
  • Python 设计模式 - 适配器模式

    精通Python设计模式第二版 第 4 章 适配器模式 学习笔记 适配器模式 适配器模式是一种结构型设计模式 能帮助我们使两个不兼容的接口兼容 假设我们想使用function a 作为接口 但是只有function b 则可以使用适配器将f
  • 适配器模式(Adapter)

    适配器是一种结构型设计模式 它能使接口不兼容的对象能够相互合作 又称封装器模式 Wrapper 适配器模式通过封装对象将复杂的转换过程隐藏于幕后 被封装的对象甚至察觉不到适配器的存在 例如 你可以使用一个将所有数据转换为英制单位 如英尺和英
  • 设计模式之适配器模式(Adapter)

    1 定义 适配器模式 Adapter 指的是将一个类的接口转换成另一个可以兼容的接口 比如我们日常生活中的转换头 古早时期使用的电池万能充 就相当于程序中使用的适配器模式 2 适配器模式的种类 2 1 类适配器模式 类适配器模式通过多重继承
  • 设计模式(适配器模式)

    这里写目录标题 一 应用 1 1 概念 1 2 应用场景 二 实现 2 1 Python实现 2 2 Java实现 2 3 Golang实现 一 应用 1 1 概念 适配器是一种结构化的设计模式 主要是为了让不兼容的对象能够相互兼容 1 2
  • 【安装Ubuntu18.04遇到的问题】未找到WIFI适配器

    大家好 我是小政 好久没有更新文章 近期开始陆续分享一些研究生阶段正在学习的知识和遇到的一些问题 联想拯救者Y9000P关于安装Ubuntu未找到WIFI适配器的解决方法 1 Ubuntu18 04 2 网卡信息 3 解决方法 1 用手机U
  • C++适配器模式

    适配器模式 1 适配器模式简介 适配器模式其实是实现了两个互不兼容的已有系统之间的桥梁效果 所以适配器模式可以说是为了实现功能的一种补救措施 最好的方式是将系统重构使用工厂模式即可 但是对已有系统的重构代价过大 所以一般情况下我们都会通过适
  • 设计模式-适配器模式

    文章目录 前言 介绍 实例 使用场景 优缺点 前言 当我们需要使用一个已存在的类 但其接口不符合我们的需求时 适配器模式 Adapter Pattern 可以派上用场 适配器模式是一种结构型设计模式 它允许我们创建一个中间层 将一个类的接口
  • [C++]适配器模式

    适配器模式 Adapter Pattern 是作为两个不兼容的接口之间的桥梁 这种类型的设计模式属于结构型模式 它结合了两个独立接口的功能 github源码路径 https github com dangwei 90 Design Mode
  • 23种设计模式:适配器模式(最强解析!!!)

    适配器模式是23种设计模式之一 适配器模式作用 适配器模式的作用 在于将一个类的接口变换为客户端所期待的另一种接口 使得原本因为接口不匹配而无法一起工作的两个类能在一起工作 也就是说 适配器模式解决的是接口兼容性问题 适配器模式实现方式 适
  • JavaScript设计模式(三)——单例模式、装饰器模式、适配器模式

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • Java设计模式-结构型设计模式-适配器模式

    Java设计模式 结构型设计模式 适配器模式 从这一专栏开始将学习设计模式 上课学习和自己总结归纳的笔记将总结出来供大家参考 参考书籍 设计模式就该这样学 其他文章 Java设计模式 UML类图 Java设计模式 七大架构设计原则 开闭原则
  • java-IO流(5)-IO流中的设计模式(装饰器模式和适配器模式)的介绍

    目录 1装饰器模式 1 1定义 1 2代码实现 1 3装饰器特点 1 4装饰器在IO流中的使用 2配适器模式 2 1Adapter适配器 2 2代码实例 2 3适配器特点 2 4适配器优缺点 2 5适配器在IO中的使用 3装饰器与适配器异同

随机推荐

  • 动态规划——最大整除子集C++

    来自LeetCode 368 描述 给出一个由无重复的正整数组成的集合 xff0c 找出其中最大的整除子集 xff0c 子集中任意一对 Si xff0c Sj 都要满足 xff1a Si Sj 61 0 或 Sj Si 61 0 如果有多个
  • HyperVolume多目标评价指标概述

    提出 Hypervolume 指标评价方法最早是由 Zitzler 等提出 xff0c 它表示由解集中的个体与参考点在目标空间中所围成的超立方体的体积 评价标准 Hypervolume 指 标 评 价 方 法 是 一 种 与 Pareto
  • 三路快排C++实现与应用

    本文共467个字 xff0c 预计阅读时间需要2分钟 三路快排是快速排序算法的升级版 xff0c 用来处理有大量重复数据的数组 主要思想是选取一个key xff0c 小于key的丢到左边 xff0c 大于key的丢到右边 xff0c 递归实
  • Wilcoxon秩和检验简介与MATLAB实现

    Wilcoxon秩和检验 rank sum test xff0c 有时也叫Mann Whitney U检验 xff0c 是另一类非参数检验方法 xff0c 它们不对数据分布作特殊假设 xff0c 因而能适用于更复杂的数据分布情况 适用性 x
  • FatMouse’ Trade

    简介 贪心算法 xff08 又称贪婪算法 xff09 是指 xff0c 在对问题求解时 xff0c 总是做出在当前看来是最好的选择 也就是说 xff0c 不从整体最优上加以考虑 xff0c 他所做出的是在某种意义上的局部最优解 贪心算法不是
  • 算法复杂度与NP问题

    引言 美剧 基本演绎法 S2E2中 xff0c 两位研究 NP 问题的数学家被谋杀了 xff0c 凶手是同行 xff0c 因为被害者即将证明 P 61 NP 问题 假设人类证明了P 61 NP 是真的 xff0c 那么就会有一个算法 xff
  • 素数筛C++

    埃拉托斯特尼筛法 xff08 sieve of Eratosthenes xff09 是古希腊数学家埃拉托斯特尼发明的计算素数的方法 对于求解不大于n的所有素数 xff0c 我们先找出sqrt n 内的所有素数p1到pk xff0c 其中k
  • ubuntu安装mysql-server环境解决无穷依赖问题

    问题 ubuntu14 04 3安装mysql时报错 xff1a sudo apt get install mysql server mysql client 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 有
  • Levenshtein编辑距离C++实现

    简介 Levenshtein Distance是1965年由苏联数学家Vladimir Levenshtein发明的 Levenshtein Distance也被称为编辑距离 xff08 Edit Distance xff09 在信息论和计
  • 红黑树简介与C++应用

    简介 红黑树 xff08 Red Black Tree xff09 是一种自平衡二叉查找树 xff0c 是在计算机科学中用到的一种数据结构 xff0c 典型的用途是实现关联数组 它是在1972年由Rudolf Bayer发明的 xff0c
  • 碰撞域与广播域的区别

    在说到碰撞域 xff08 冲突域 xff09 和广播域之前 xff0c 首先要介绍一下三个网络互连设备 集线器 交换机和路由器 集线器 集线器是工作在物理层的设备 xff0c 当他收到数据以后就把这个数据复制复制以后就把这个数据象所有的接口
  • WordPress数据库error establishing a database connection错误

    本文共777个字 xff0c 预计阅读时间需要2分钟 作为一个买不起大型服务器只能用阿里云学生机的站长 xff0c 经常遇到error establishing a database connection错误 这是一种建立数据库连接时的错误
  • 基于稀疏大规模矩阵的多目标进化算法简介

    简介 可以看到本文的特色图片是个极度稀疏连接的神经网络 xff0c 它是由我们即将介绍论文中的算法SparseEA得到的 此篇论文是BIMK的田野 张兴义等人发表在IEEE Transactions on Evolutionary Comp
  • 回溯法——素数环C++实现

    本文共928个字 xff0c 预计阅读时间需要3分钟 回溯法简介 回溯法按深度优先策略搜索问题的解空间树 首先从根节点出发搜索解空间树 xff0c 当算法搜索至解空间树的某一节点时 xff0c 先利用剪枝函数判断该节点是否可行 xff08
  • Prime Path素数筛与BFS动态规划

    本文共2053个字 xff0c 预计阅读时间需要6分钟 BFS BFS xff0c 其英文全称是Breadth First Search BFS并不使用经验法则算法 从算法的观点 xff0c 所有因为展开节点而得到的子节点都会被加进一个先进
  • C++读取和写入文件(fstream等)

    本文共321个字 xff0c 预计阅读时间需要1分钟 2019年7月非常忙 xff0c 这大概是这个月的第一篇吧 某高校机试需要从文件中读取数据并将数据写入到文件中 完成这一操作需要用到fstream模块 xff0c 网上一堆资料 xff0
  • 并查集应用——PAT甲级2019春季

    并查集适用问题举例 1 已知 xff0c 有n个人和m对好友关系 2 如果两个人是直接的或者间接的好友 xff08 好友的好友的好友 xff09 xff0c 那么他们属于一个集合 xff0c 就是一个朋友圈中 3 写出程序 xff0c 求这
  • 抽象工厂模式与单件模式C++混合实现

    抽象工厂 当每个抽象产品都有多于一个的具体子类的时候 xff0c 工厂角色怎么知道实例化哪一个子类呢 xff1f 比如每个抽象产品角色都有两个具体产品 抽象工厂模式提供两个具体工厂角色 xff0c 分别对应于这两个具体产品角色 xff0c
  • source命令自动运行terminal的指令

    source命令也称为 点命令 xff0c 也就是一个点符号 xff08 xff09 source命令通常用于重新执行刚修改的初始化文件 xff0c 使之立即生效 xff0c 而不必注销并重新登录 用法 xff1a source filen
  • 适配器模式C++实现

    本文共916个字 xff0c 预计阅读时间需要3分钟 简介 适配器模式 xff1a 将一个类的接口转换成客户希望的另一个接口 适配器模式让那些接口不兼容的类可以一起工作 适配器模式的别名为包装器 Wrapper 模式 xff0c 它既可以作