设计模式--适配器模式

2023-11-08

    适配器模式属于结构型模式
    基本原理:根据不同的需求,使用一个适配器去寻找应对的方法。
    主要流程:
            1.创建解决方法的类。
            2.创建一个适配器,根据不同需求对应相应的解决方法。
            3.使用一个类去分配适配器。
    注意:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

#include <iostream>
#include <string>
using namespace std;

//创建需要适配的种类
class AdvanceMediaPlayer
{
public:
    virtual void playVlc(string fileName) = 0;
    virtual void playMp4(string fileName) = 0;
};
class VlcPlayer : public AdvanceMediaPlayer
{
public:
    void playVlc(string fileName)
    {
        cout<<"playing vlc file. name is "<<fileName<<endl;
    }
    void playMp4(string fileName){}
};
class Mp4Player : public AdvanceMediaPlayer
{
public:
    void playVlc(string fileName){}
    void playMp4(string fileName)
    {
        cout<<"playing mp4 file. name is "<<fileName<<endl;
    }
};

//创建适配器
class MediaPlayer
{
public:
    virtual void play(string audioType,string fileName) = 0;
};
//适配器的派生类
class MediaAdapter:public MediaPlayer
{
private:
    AdvanceMediaPlayer * advanceMediaPlayer;
public:
    MediaAdapter(string audioType)
    {
        if(audioType == "vlc")
        {
            advanceMediaPlayer = new VlcPlayer();
        }
        else if(audioType == "mp4")
        {
            advanceMediaPlayer = new Mp4Player();
        }
    }
    void play(string audioType,string fileName)
    {
        if(audioType == "vlc")
        {
            advanceMediaPlayer->playVlc(fileName);
        }
        else if(audioType == "mp4")
        {
            advanceMediaPlayer->playMp4(fileName);
        }
    }
};
//使用适配器的类
class AudioPlayer:public MediaPlayer
{
private:
    MediaAdapter * mediaAdapter;
public:
    void play(string audioType,string fileName)
    {
        if(audioType == "mp3")
        {
            cout<<"playing mp3 file. name is "<<fileName<<endl;
        }
        else if(audioType == "mp4" || audioType == "vlc")
        {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter->play(audioType,fileName);
        }
        else
        {
            cout<<"Invalid media. "<<audioType<<"format not supported"<<endl;
        }
    }
};

int main()
{
    AudioPlayer *audioPlayer = new AudioPlayer();
    audioPlayer->play("mp3","aaa.mp3");
    audioPlayer->play("mp4","bbb.mp4");
    audioPlayer->play("vlc","ccc.vlc");
    audioPlayer->play("avi","ddd.avi");
    return 0;
}

 

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

设计模式--适配器模式 的相关文章

  • 常用设计模式总结

    设计模式的相关知识 很多书籍和博客中都有详细总结 本文总结的目的 1 将自己学习到的设计模式的知识按照自己的逻辑重新总结 方便查看和记忆 2 方便让自己对设计模式中常用的知识有一个系统的认知 设计模式 话设计模式 书中提到 24 种设计模式
  • 设计模式-单一职责原则介绍与理解

    描述 一个类应该专注于实现一个功能 好处 便于代码复用 举例 俄罗斯方块游戏 首先可以想到的是游戏逻辑与界面的分离 也就是说逻辑一个类 界面部分一个类 这样做的好处就是我们可以复用游戏逻辑的代码 例如我们用java写了一个基于PC端的俄罗斯
  • 设计模式之享元模式

    一 背景 在面向对象程序设计过程中 有时会面临要创建大量相同或相似对象实例的问题 创建那么多的对象将会耗费很多的系统资源 它是系统性能提高的一个瓶颈 例如 围棋和五子棋中的黑白棋子 图像中的坐标点或颜色 局域网中的路由器 交换机和集线器 教
  • 面向过程和面向对象的语言有哪些,以及优缺点(一篇文章让你理解)

    C语言是面向过程的 而C python java是面向对象的 面向过程的编程思想将一个功能分解为一 个一个小的步骤 我们通过完成一个一 个的小的步骤来完成一个程序 优点 这种编程方式 符合我们人类的思维 编写起来相对比较简单 缺点 但是这种
  • 计算资源合并模式——云计算架构常用设计模式

    背景 云计算的解决方案中 最初设计可能有意遵循关注点分离的设计原则 把操作分解为独立的计算单元以便可以单独托管和部署 然而 虽然这种策略可以帮助简化解决方案的逻辑实现 但是在同一个应用程序中要部署大量的计算单元 这会增加运行时的托管成本 并
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 设计模式 -- 工厂模式(Factory Pattern)

    简单工厂模式 Simple Factory Pattern 根据传入的参数决定实例化哪个对象 优点 不直接在客户端创建具体产品的实例 降低了耦合性 缺点 违反了开闭原则 对扩展开放 对修改关闭 不容易形成高内聚松耦合结构 每当我们增加一种产
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • 设计模式--提供者模式provider

    设计模式 C 提供者模式 Provider Pattern 介绍 为一个API进行定义和实现的分离 示例 有一个Message实体类 对它的操作有Insert 和Get 方法 持久化数据在SqlServer数据库中或Xml文件里 根据配置文
  • HeadFirst 设计模式学习笔记10——MVC分析

    1 M V C Model View Controller 模式 视图 控制器 这是一种范型 模型对象正是应用系统存在的理由 你设计的对象 包含了数据 逻辑和其他在你的应用领域创建定制的类 视图通常是控件 用来显示和编辑 控制器位于二者中间
  • 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装饰器与适配器异同
  • Java设计模式之装饰者设计模式Decorator Pattern

    目录 一 基本概念 二 结构 1 图示 三 案例演示 被装饰对象的基类 一个接口 有cost 和description 两个抽象方法 具体被装饰的对象 实现上面这个接口 装饰者抽象类 基类 实现drink接口 具体的装饰者类 糖 具体装饰者
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • Java设计模式:模板方法模式

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于 Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得 关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 一 模板方法模式的定义 二 模板方
  • 谁能想到Java多线程设计模式竟然能被图解,大佬就是大佬,太牛了

    设计模式 Design pattern 代表了最佳的实践 通常被有经验的面向对象的软件开发人员所采用 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • C++设计模式 --1.工厂模式和单例模式

    文章目录 1 工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 2 单例模式 懒汉式 饿汉式 1 工厂模式 简单工厂模式

随机推荐

  • 崩溃场景_【3D】MaxScript 回调脚本异常(病毒清理)撤销崩溃 灯光消失等常见问题...

    这是另众多3DMAX新老玩家头疼的问题 回调脚本异常是什么 其实它是病毒的体现 而且老版本的ALC等杀毒插件对它无效 出现这个弹窗伴随出现的就是撤销崩溃 灯光删除 关闭文件自动保存等等问题 来了解一下彻底解决的方法 视频版 图文版 1 打开
  • 记录一下 CMU 15445 项目

    目录 Write In Front PROJECT 1 BUFFER POOL TASK 1 LRU REPLACEMENT POLICY 核心概念 数据结构 Other TASK 2 BUFFER POOL MANAGER INSTANC
  • 区块链学习笔记3——BTC协议

    区块链学习笔记3 BTC协议 学习视频 北京大学肖臻老师 区块链技术与应用 笔记参考 北京大学肖臻老师 区块链技术与应用 公开课系列笔记 目录导航页 数字货币所面临的主要挑战 Double spending attack 双花攻击 同一张数
  • java es score_elasticsearch java原生打分插件开发

    能有影响elasticsearch score的方法有很多 官方推荐的是使用内置的painless脚本语言结合function score来重新定义score 由于本人开发的项目其算法是由java语言开发的 于是决定尝试原生脚本开发 ela
  • 石油信息化新技术应用前景

    随着石油信息化集中集成 物联网的建设 云计算 移动互联 大数据技术在石油行业的应用前景如何呢 什么是智慧油田 智能油田呢 个人的一些想法总结如下 对行业的关注基本停留在14年4月 疏漏局限难免 一 关于云计算基础设施在互联网 电商领域应用方
  • html常见标签总结1

    1 常见标签总结01 代码 h1 文本修饰标签 h1 h2 表强调 h2 p strong 这是strong文本修饰标签的效果 strong p p em 这是em文本修饰标签的效果 em p p strong的强调效果更强 em的强调效果
  • linux,时间改成utc

    ln sf usr share zoneinfo UTC etc localtime 运行ok
  • 系统修复模式(Recovery mode) 的体验

    什么是修复模式 直观的体验就是在你的normal mode失败的时候 你发现在你的启动页面 和grub有关 有另一种选项就是recovery mode 具体的定义可以搜索百度或其他 为什么在其他启动失败的时候 修复模式能进入系统 我的经历是
  • Spring MVC静态资源处理

    优雅REST风格的资源URL不希望带 html 或 do 等后缀 由于早期的Spring MVC不能很好地处理静态资源 所以在web xml中配置DispatcherServlet的请求映射 往往使用 do xhtml等方式 这就决定了请求
  • 2023年十大最佳自动化测试工具

    Best Automation Testing Tools for 2023 对更快交付高质量软件 或 快速质量 的需求要求组织以敏捷 持续集成 CI 和DevOps方法论来寻找解决方案 测试自动化是这些方面的重要组成部分 最新的 2018
  • 合并DataGrid单元格

    做项目有时也会遇到要合并DataGrid单元格的情况 在DataGrid单元格中有ColumnSpan RowSpan Visible属性 这跟Table控件中的colspan rowspan属性相同 因此我们可以利用这些属性来合并Data
  • 前端例程20221012:宣纸材质背景

    演示 原理 使用 background image 加载材质图片 材质图片使用半透明的灰度图像 使用 background color 进行染色 代码
  • 在IDEA集成Github

    在IDEA集成Github 在IDEA中设置Git 在File gt Setting gt Version Control gt Git gt Path to Git executable选择你的git安装后的git exe文件 然后点击T
  • OC_YYModel字典转模型的几种详细用法

    OC YYModel字典转模型的几种详细用法 目录 JSON转字符串 普通字典转模型 模型属性有自定义的模型YYUSer 属性有数组 数组里自定义模型 还有字典和集合 字典里的key与模型里的属性名不一致 常用的几个方法 json转模型 i
  • 以太坊分片Sharding FAQ

    简介 目前 在所有的区块链协议中每个节点存储所有的状态 账户余额 合约代码和存储等等 并且处理所有的交易 这提供了大量的安全性 但极大的限制了可扩展性 区块链不能处理比一个单节点更多的交易 很大程度上因为这个原因 比特币被限制在每秒3 7笔
  • 【Linux篇】第八篇——Linux下的进程控制(进程创建+进程终止+进程等待+进程程序替换+简易shell的实现)

    这篇博客就要开始聊一聊进程控制相关的内容了 这部分的内容十分的丰富且十分的重要 学好这一块内容是非常有必要的 目录 进程创建 fork函数 写时拷贝 进程终止 进程退出的三种场景 进程常见的退出方法 进程等待 进程等待的方法 wait方法
  • Unity 实用小技巧合集

    Unity小技巧介绍 一 Unity小技巧介绍 二 Unity小技巧介绍 三 Unity小技巧介绍 四
  • 用canvas绘制微信小程序海报页面并保存相册-适用微信原生

    微信小程序绘制海报并保存相册 tip 代码中使用的是uni的api 如果使用原生微信小程序开发 可以把uni更换成wx使用 文章目录 微信小程序绘制海报并保存相册 前言 一 分析需求 二 准备数据 三 编码开始 html部分 解析 js部分
  • Python中使用xpath获取select option的每一行的text和value

    原数据内容如下
  • 设计模式--适配器模式

    适配器模式属于结构型模式 基本原理 根据不同的需求 使用一个适配器去寻找应对的方法 主要流程 1 创建解决方法的类 2 创建一个适配器 根据不同需求对应相应的解决方法 3 使用一个类去分配适配器 注意 适配器不是在详细设计时添加的 而是解决