设计模式(六)适配器模式

2023-11-16

前面介绍的几种设计模式都是创建型模式,用于以不同的方式创建对象。下面我们来看看适配器模式,这是一种结构型模式,用于在两个无关的接口之间搭建桥梁。

适配器模式主要用于在新旧代码直接转换。

直接看例子吧。假设我们有一个音乐播放器。

public interface MusicPlayer {
    void playMusic();
}

class MyMusicPlayer implements MusicPlayer {

    @Override
    public void playMusic() {
        System.out.println("播放音乐");
    }
}

然后还有一个视频播放器。

public interface VideoPlayer {
    void playVideo();
}

class MyVideoPlayer implements VideoPlayer{

    @Override
    public void playVideo() {
        System.out.println("播放视频");
    }
}

我们可以看到这两个接口的方法不同,现在我们希望以一种统一的方式播放音乐和视频。所以就需要类似下面的适配器。在适配器中,我们做了一些工作,将两个接口的方法包装,统一使用play方法调用。

public interface MediaPlayer {
    void play();
}

class MediaPlayerAdapter implements MediaPlayer {
    private MusicPlayer musicPlayer;
    private VideoPlayer videoPlayer;
    private boolean isMusicPlayer = false;
    private boolean isVideoPlayer = false;

    public MediaPlayerAdapter(Object player) {
        if (player instanceof MusicPlayer) {
            musicPlayer = (MusicPlayer) player;
            isMusicPlayer = true;
        } else if (player instanceof VideoPlayer) {
            videoPlayer = (VideoPlayer) player;
            isVideoPlayer = true;
        }
    }

    @Override
    public void play() {
        if (isMusicPlayer) {
            musicPlayer.playMusic();
        } else if (isVideoPlayer) {
            videoPlayer.playVideo();
        }
    }
}

我们可以看到,适配器的作用很强大,可以将不同接口联系起来,所以适配器模式的使用非常广泛。留意一下就会在很多地方发现它的身影。

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

设计模式(六)适配器模式 的相关文章

  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • 设计模式的 C++ 实现---原型模式

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 工厂方法模式 二 抽象工厂模式 一 抽象工厂模式 二 前言 原型模式指直接用一个已经存在的对象来创建一个新的对象 然后对新对象进行稍微修改即可 类似复制的操作
  • C++设计模式(8)——命令模式

    命令模式 亦称 动作 事务 Action Transaction Command 意图 命令模式是一种行为设计模式 它可将请求转换为一个包含与请求相关的所有信息的独立对象 该转换让你能根据不同的请求将方法参数化 延迟请求执行或将其放入队列中
  • 设计模式-单一职责原则介绍与理解

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

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • 设计模式学习笔记(一)之单例模式

    单例模式 作用 保证一个类只有一个实例 并且提供访问这个实例的全局访问点 应用场景有 数据库连接池 spring中 Bean默认是单例 Servlet中 每一个Servlet是单例 配置文件的类 一般是单例 优点 单例只生成一个实例 减少系
  • 小谈设计模式(1)—总序

    小谈设计模式 1 总序 专栏地址 开始操作 设计模式总论 设计模式是什么 组成要素 模式名称 问题描述 解决方案 效果描述 设计模式有什么作用 提供可重用的解决方案 提高代码的可读性和可维护性 促进代码的可扩展性 提高代码的灵活性和可重用性
  • 计算资源合并模式——云计算架构常用设计模式

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

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

    单一职责原则 SRP 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于把这些职责耦合在了一起 一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力 这种耦合会导致脆弱的设计 当发生变化时 设计会遭受到意想不到
  • 设计模式-2--工厂模式(Factory Pattern)

    一 什么是工厂模式 工厂模式 Factory Pattern 是一种创建型设计模式 它提供了一种创建对象的接口 但是将对象的实例化过程推迟到子类中 工厂模式允许通过调用一个共同的接口方法来创建不同类型的对象 而无需暴露对象的实例化逻辑 工厂
  • 每日一问:你想如何破坏单例模式?

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

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • 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装饰器与适配器异同
  • 【设计模式】工厂模式(Factory Pattern)

    1 概述 工厂模式 Factory Pattern 是最常用的设计模式之一 它属于创建类型的设计模式 它提供了一种创建对象的最佳方式 在工厂模式中 我们在创建对象时不会对客户端暴露创建逻辑 并且是通过一个共同的接口来指向新创建的对象 工厂模
  • 谁能想到Java多线程设计模式竟然能被图解,大佬就是大佬,太牛了

    设计模式 Design pattern 代表了最佳的实践 通常被有经验的面向对象的软件开发人员所采用 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 【设计模式之美】 SOLID 原则之五:依赖反转原则:将代码执行流程交给框架

    文章目录 一 控制反转 IOC 二 依赖注入 DI 三 依赖注入框架 DI Framework 四 依赖反转原则 DIP 一 控制反转 IOC 通过一个例子来看一下 什么是控制反转 public class UserServiceTest

随机推荐

  • CentOS7 上配置Openstack[单机配置]

    本文目录 写在前面 配置前须知 step1 主机设置 step2 配置网口和DHCP确定IP step3 配置网络访问Internet step4 停止网络管理器关闭防火墙 step5 关闭SELinux step6 更新yum step7
  • 深度学习基础知识(发展历史)

    1 深度学习的历史及发展趋势 1 1 深度学习的历史 一般来说 目前为止已经有三次深度学习的发展浪潮 在20 世纪 40 年代到 60 年代深度学习被称为控制论 cybernetics 20 世纪 80 年代到 90 年代深度学习被誉为连接
  • mysql between and 和 大于小于的区别

    1 表达式 between 下界值 and 上界值 限定 表达式 的值介于 下界值 到 上界值 之间的所有值 并且包含 下界值 和 上界值 2 表达式 gt 下界值 and 表达式 lt 上界值 限定 表达式 的值介于 下界值 到 上界值
  • Linux内核调试技术——进程D状态死锁检测

    Linux的进程存在多种状态 如TASK RUNNING的运行态 EXIT DEAD的停止态和TASK INTERRUPTIBLE的接收信号的等待状态等等 可在include linux sched h中查看 其中有一种状态等待为TASK
  • element-ui el-dialog如何设置响应式宽高且永远水平垂直居中

    写在前面 el dialog是使平常使用element ui比较常用的一个组件 想要灵活控制它达到想要的开发效果 就必须要熟悉它默认一些属性 默认width 50 高度为标题和el dialog body el dialog footer内
  • 区块链-一些基本概念

    Hash collision resistance collision free 是说在密码学中 对于一个hash函数 很难找到两个不同的输入使得其hash之后的输出是一样的 Collision resistance is a proper
  • 两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

    本套模板非常适合生活类 两性类 减肥类等等类型的网站 这类型网站比较好做流量 因为客户群体众多 可以自行改内容为其他类型网站模板总体非常简洁漂亮 配色合理 视觉舒服 并且配合强大的帝国cms7 5核心 未来做大站真心很适合 也可以用来做站群
  • Redis Day02 - springBoot更改Redis默认序列化方式

    默认jdkSerializeable序列化后cli显示 xac xed x00 x05t x00 bcustomer 此刻在cli中get customer 为nil 为避免这种情况的出现 可自行修改序列化方式 只需在启动类自定义序列化类r
  • .yml文件_【玩转SpringBoot】配置文件yml的正确打开姿势

    作者 编程新说李新杰 出自 微信公众号 编程新说 原文 玩转SpringBoot 配置文件yml的正确打开姿势 序言 在很久以前 Spring的配置文件是基于XML的 它的名字就是applicationContext xml 没错 就只有这
  • 渗透测试常用浏览器插件汇总

    1 shodan 这个插件可以自动探测当前网站所属的国家 城市 解析IP地址以及开放的服务和端口 包括但不限于FTP DNS SSH或者其他服务等 属被动信息搜集中的一种 2 hackbar 收费之后用Max Hackerbar代替 这个插
  • 从零开始探索C语言(八)----指针

    文章目录 1 什么是指针 2 如何使用指针 3 NULL 指针 4 指针的算术运算 5 指针数组 6 指向指针的指针 7 传递指针给函数 8 从函数返回指针 有人说 指针是C语言的灵魂 所以学习C语言 学习指针是很有必要的 通过指针 可以简
  • Servlet执行原理和API详解---【创建Servlet项目】

    目录 一 Servlet 是什么 主要工作 第一个Servlet项目 编写代码 打包程序 一 Servlet 是什么 Servlet 是一款基于HTTP协议 用来开发Java Web 运行在Tomcat里面的里的框架技术 一种实现动态页面的
  • 微信抖音的服务器,抖音微信登陆未获得权限怎么办

    摘要 腾兴网为您分享 钉钉 苹果手机 ios系统 闲聊app 唱吧app等知识经验教程 欢迎大家关注腾兴网 抖音微信登陆未获得权限是很多小伙伴们遇到的 因此想要知道这个该怎么解决 不知道解决办法的小伙伴们 就让小编给大家详细的讲讲 一起来看
  • 【MySQL小白之路】数据的更新与删除

    MySQL小白之路 数据的更新与删除 数据更新 关键字 UPDATE 所需信息 1 需更新的表名 2 需更新的列名与更新值 3 锁定更新行的过滤条件 样例 以下为表的定义 student表 stu id int NOT NULL PRIMA
  • Shiro 如何对Jsp页面标签授权呢?

    转自 Shiro 如何对Jsp页面标签授权呢 下文笔者讲述jsp页面标签授权的方法分享 如下所示 shiro中使用Jsp页面标签授权首先需要导入标签库 常见的Shiro标签
  • 1025 反转链表

    给定一个常数 K 以及一个单链表 L 请编写程序将 L 中每 K 个结点反转 例如 给定 L 为 1 2 3 4 5 6 K 为 3 则输出应该为 3 2 1 6 5 4 如果 K 为 4 则输出应该为 4 3 2 1 5 6 即最后不到
  • Python3 - 实现邮件的发送

    目录 一 使用SMTP模块发送邮寄 二 发送HTML格式右键 三 发送带附件的邮件 四 Django处理邮件的发送 4 1 settings配置 4 2 授权码的获取 4 3 视图函数 4 4 群发邮件 一次发送多份 4 5 携带附件或发送
  • Gitee的使用

    一 window环境下的使用 1 在window系统下创建一个文件 这里在电脑的F盘下创建gitee文件夹 打开Git Bash窗口 进入这个文件夹中 2 使用git init进行初始化 3 信息的配置 去掉 global 之后 操作只对本
  • 静态代码检查 - SourceInsight_Scan 使用说明

    SourceInsight Scan是一款集成在 SourceInsight 中的c c 代码静态分析插件 集成了cppcheck coverity pclint等业界优秀的静态分析工具的优点 旨在帮助开发人员 在IDE中快速发现编译器无法
  • 设计模式(六)适配器模式

    前面介绍的几种设计模式都是创建型模式 用于以不同的方式创建对象 下面我们来看看适配器模式 这是一种结构型模式 用于在两个无关的接口之间搭建桥梁 适配器模式主要用于在新旧代码直接转换 直接看例子吧 假设我们有一个音乐播放器 public in