java设计模式(七)适配器模式(Adapter Pattern)

news2024/12/24 2:47:37

1、模式介绍:

        适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另外一个接口。适配器模式通常用于需要复用现有的类,但是接口与客户端的要求不完全匹配的情况。它包括两种形式:类适配器模式和对象适配器模式。

2、应用场景:

         系统需要使用现有的类,而这些类的接口不符合需求。
        不想修改现有的接口,而又需要复用该接口的情况。
        多个类似功能的接口需要统一。

3、优点:

        增加了类的透明性和复用性:将具体的实现封装在适配器中,对客户端来说是透明的,同时提高了被适配类的复用性。
        灵活性好:通过适配器,可以在不改变原有代码的基础上增加新的适配器类,符合开闭原则。

4、缺点:

        过多使用适配器,会让系统非常零乱。
        增加系统的复杂性
:因为增加了额外的适配器,可能会增加系统的理解难度

5、代码实现:

/**
 * 适配接口
 *
 * @author FM_南风
 * @date 2024/6/27 13:53
 */
public interface MediaPlayer {
    void play(String mediaType, String fileName);
}

/**
 * 被适配者
 *
 * @author FM_南风
 * @date 2024/6/27 13:54
 */
public class AudioPlayer implements MediaPlayer{
    @Override
    public void play(String mediaType, String fileName) {
        if (mediaType.equalsIgnoreCase("mp3")) {
            System.out.println("播放MP3文件: " + fileName);
        } else {
            System.out.println("使用" + mediaType + "媒体播放");
        }
    }
}

/**
 * 新适配接口
 *
 * @author FM_南风
 * @date 2024/6/27 13:55
 */
public interface AdvancedMediaPlayer {
    void playVlc(String fileName);
    void playMp4(String fileName);
}

/**
 * Mp4播放器实现新的接口
 *
 * @author FM_南风
 * @date 2024/6/27 13:56
 */
public class Mp4Player implements AdvancedMediaPlayer{
    @Override
    public void playVlc(String fileName) {

    }

    @Override
    public void playMp4(String fileName) {
        System.out.println("播放MP4文件: " + fileName);
    }
}

/**
 * Vlc播放器实现新的接口
 *
 * @author FM_南风
 * @date 2024/6/27 13:56
 */
public class VlcPlayer implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        System.out.println("播放Vlc文件: " + fileName);
    }

    @Override
    public void playMp4(String fileName) {

    }
}

/**
 * 适配器类,实现目标接口并持有被适配者的引用
 *
 * @author FM_南风
 * @date 2024/6/27 13:57
 */
public class MediaAdapter implements MediaPlayer{

    AdvancedMediaPlayer advancedMusicPlayer;

    public MediaAdapter(String mediaType) {
        if (mediaType.equalsIgnoreCase("vlc")) {
            advancedMusicPlayer = new VlcPlayer();
        } else if (mediaType.equalsIgnoreCase("mp4")) {
            advancedMusicPlayer = new Mp4Player();
        }
    }

    @Override
    public void play(String mediaType, String fileName) {
        if (mediaType.equalsIgnoreCase("vlc")) {
            advancedMusicPlayer.playVlc(fileName);
        } else if (mediaType.equalsIgnoreCase("mp4")) {
            advancedMusicPlayer.playMp4(fileName);
        }
    }
}


/**
 * 应用
 *
 * @author FM_南风
 * @date 2024/6/27 13:58
 */
public class AdapterClient {

    public static void main(String[] args) {
        MediaPlayer audioPlayer = new AudioPlayer();

        audioPlayer.play("mp3", "音乐.mp3");
        audioPlayer.play("mp4", "视频.mp4");
        audioPlayer.play("vlc", "视频.vlc");
        audioPlayer.play("avi", "视频.avi"); // Unsupported media type
    }
}

6、结果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过CDS View读取HANA View

HANA View在HANA 数据库层,CDS View在​ABAP层。那我们可以用CDS view直接读取HANA View​。在CDS View里还可以加些​逻辑。 ​具体怎么做呢? 首先你有了一个HANA的calculation view。这个calculation view, 它是可以被HANA SQL访问的&#…

【新闻】技术工种魅力大增,美国Z世代职场新出路

美国需要更多水管工,Z世代正在响应这一号召。 长期受到劳动力短缺困扰的技工行业,如今对美国最年轻的就业群体产生新的吸引力,他们中许多人正选择放弃读大学。随着从焊接到机械加工等领域出现技术迭代,薪资正在上涨,这…

DV SSL证书如何升级到OV SSL 证书

随着互联网的发展和用户对数据安全性的关注,越来越多的网站开始采用SSL证书来保护用户的隐私和数据。在选择SSL证书时,有些网站可能会首先选择经济实惠的DV(域名验证)证书,但随着业务的发展和用户需求的增加&#xff0…

人工智能AI风口已开:如何赋予UI设计与视频剪辑新生命

随着科技的浪潮不断向前推进,人工智能(AI)正以惊人的速度重塑着我们的世界,特别是在创意产业的核心领域——UI设计与视频剪辑中,AI正逐步成为驱动行业创新与变革的关键力量。在这个AI技术全面开花的新时代,…

Python学习01

一、课程简介 1、学习目标 2、学习成果 二、初识python-python介绍 python程序员 python的创始 python语言的优点 三、初始python-软件安装 0、软件安装 1、程序编译 2、python解释器的安装 官网地址:Welcome to Python.orgThe official home of the Python Progr…

数字人源头工厂是骗局吗?数字人源码部署内幕曝光!

随着数字人应用的不断普及,其行业前景和发展潜力也逐渐展现在了在人们的眼前,连带着数字人源头工厂和数字人系统源码部署的热度也也持续飙升。不过,就目前的市场情况来看,绝大多数数字人源头工厂部署出的数字人系统源码都不尽人意…

创意学生木工工具——木工锯床

开展创意木工课程丰富了学校的课程多样性,强化了实践教育,并实现了跨学科的融合,在教育理念方面,创意木工课程强调了学生的主体地位,注重了学生的全面发展,并倡导了实践育人的理念,培养学生的综…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类: package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…

单段时间最优S型速度规划算法

一,背景 在做机械臂轨迹规划的单段路径的速度规划时,除了参考《Trajectory Planning for Automatic Machines and Robots》等文献之外,还在知乎找到了这位大佬 韩冰 写的在线规划方法: https://zhuanlan.zhihu.com/p/585253101/e…

ChatGPT自媒体创作秘籍:高效生成优质文章和视频

在这个信息爆炸的时代,自媒体已经成为人们获取信息、表达观点和分享生活的重要途径。而作为自媒体创作者,如何高效地生成优质内容,吸引更多的关注和互动,是每一个创作者都在思考的问题。今天,我将为大家分享利用ChatGP…

ComfyUI+PhotoMaker|一键创造个性化人物形象

ComfyUI和PhotoMaker,两款引领AI图像编辑潮流的软件,以其强大的功能和便捷的操作,深受广大艺术爱好者和专业人士的喜爱。本文将带你深入了解ComfyUI和PhotoMaker的结合使用,助你轻松打造个性化人物形象,让你的作品更加…

海富泰可直动式比例阀控制器EVRD-03C26SB-C1D24-B00

控制EVOTEK海富泰可直动式及先导式比例方向阀EVRD-03A04SA-C1D24-V00、EVRD-03C08SB-C1D24-B00、EVRD-03A16SA-C1D24-V00、EVRD-03C26SB-C1D24-B00、EVRD-05A30SA-C1D24-V00、EVRD-05C60SB-C1D24-B00、EVRD-P05A80SA-IIC1D24-B00、EVRD-P07C100SB-EEC1D24-V00、EVRD-P07A150SA-…

靠!AI绘画月入过万!是否现实?

前言 AI人工智能已经出现在了越来越多领域中,比如最近一段时间,AI绘画就受到了许多人的关注,一来,其背后隐藏的版权问题、替代性问题引发了人们的广泛讨论,再者,AI绘画在短期时间内成为了流量密码&#xf…

深度学习在蛋白质结构预测的新突破:AlphaFold、RoseTTAFold与ESMFold

在蛋白质结构预测和功能预测领域,基于机器学习的方法最近取得了显著的进展。特别是深度学习技术在这个领域中展现出了强大的能力,代表性的技术有 DeepMind 的 AlphaFold 和 RoseTTAFold。这些技术利用了大量的生物数据和先进的神经网络架构,极…

Java-Stream流常用方法详解

概述 Java 8引入的Stream API用于对集合(如列表、集合等)进行函数式操作(如过滤、映射、规约等)。这类流提供了一种高效且易读的方式来处理集合中的数据。 获取Stream对象的方式有哪些个? 1 Stream接口提供的: of静态方法 pu…

【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标:mae、rmse等

【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标:mae、rmse等 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免…

Web渗透-命令执行漏洞及常见靶场探测实战

一、概述 命令执行(RCE):应用有时需要调用一些执行系统命令的函数,如php中的system,exec,shell exec,passthru,popen,proc popen等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中&a…

Open AI不能用了,国产大模型疯狂整活

行业开启新一轮竞争。 国产大模型公司集体出手 来活了,国内AI大模型市场又要热闹一阵了。 近日,市场消息称,Open AI在其官方邮件表示,**从7月9日开始,将采取额外措施阻止来自非支持国家和地区的API(应用程…

SyntaxError: Unexpected token ‘<‘ (at chunk-vendors.fb93d34e.js:1:1)打包后页面白屏vue

本地运行一切正常,打包到线上,页面一篇空白。我确定输入路径正确。。。 控制台报错,我就开始百度,有的说清空缓存就行了,但我清空了还是这样。。。 然后我就去排查原因。看到页面请求js,但是请求的好像有点…

气膜体育馆对高度的要求—轻空间

在现代体育场馆的建设中,气膜体育馆以其独特的优势,逐渐成为人们关注的焦点。不同于传统的钢筋混凝土结构,气膜体育馆以其轻盈、灵活、环保的特点,为人们带来了全新的体育体验。在设计与建设气膜体育馆时,高度是一个关…