设计模式-适配器模式
时间:2023-05-05 12:00:17来源:腾讯云


(资料图)

适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起工作。适配器模式有时也被称为包装器模式。

适配器模式包含以下角色:

目标接口(Target Interface):定义客户端所需的接口,这是客户端代码调用的接口。适配器(Adapter):适配器是一个类,它实现目标接口并且包含一个对被适配对象的引用。被适配对象(Adaptee):被适配对象是一个已经存在的对象,它的接口与目标接口不兼容。客户端(Client):客户端通过目标接口调用适配器的方法来与被适配对象进行交互。

下面是一个适配器模式的Java代码示例:

首先定义一个目标接口:

public interface MediaPlayer {   public void play(String audioType, String fileName);}

接着定义一个具体的被适配对象:

public class Mp4Player {   public void playMp4(String fileName) {      System.out.println("Playing mp4 file. Name: "+ fileName);    }}

接下来定义适配器,它实现了目标接口,并包含一个对被适配对象的引用:

public class MediaAdapter implements MediaPlayer {   AdvancedMediaPlayer advancedMusicPlayer;   public MediaAdapter(String audioType){      if(audioType.equalsIgnoreCase("vlc") ){         advancedMusicPlayer = new VlcPlayer();             }else if (audioType.equalsIgnoreCase("mp4")){         advancedMusicPlayer = new Mp4Player();      }     }   @Override   public void play(String audioType, String fileName) {      if(audioType.equalsIgnoreCase("vlc")){         advancedMusicPlayer.playVlc(fileName);      }else if(audioType.equalsIgnoreCase("mp4")){         advancedMusicPlayer.playMp4(fileName);      }   }}

最后定义一个客户端,它通过目标接口调用适配器的方法来与被适配对象进行交互:

public class AudioPlayer implements MediaPlayer {   MediaAdapter mediaAdapter;    @Override   public void play(String audioType, String fileName) {              //播放 mp3 音乐文件的内置支持      if(audioType.equalsIgnoreCase("mp3")){         System.out.println("Playing mp3 file. Name: " + fileName);               }       //mediaAdapter 提供了播放其他文件格式的支持      else if(audioType.equalsIgnoreCase("vlc")          || audioType.equalsIgnoreCase("mp4")){         mediaAdapter = new MediaAdapter(audioType);         mediaAdapter.play(audioType, fileName);      }      else{         System.out.println("Invalid media. " + audioType + " format not supported");      }   }   }

这个例子中,客户端调用了 MediaPlayer接口的 play方法。如果传入的文件类型是 mp3,则直接在 AudioPlayer类中播放,否则就通过适配器模式实现播放其他格式的音频文件。当需要播放不支持的音频格式时,AudioPlayer类会创建一个 MediaAdapter对象,该对象可以将不支持的音频格式转换成支持的格式,然后调用 MediaPlayer接口的 play方法来播放该格式的音频文件。

使用适配器模式的好处是可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。

标签:

最新
  • 设计模式-适配器模式

    适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起

  • 银行流水是哪个银行都可以打吗? 银行流水是什么意思?

    银行流水是哪个银行都可以打吗?当然,除了银行营业网点和自主查询机以外,持卡人也可以到发卡银行的官方

  • 行车记录仪检测不到sd卡是啥原因?轮毂修复影响安全吗?

    行车记录仪检测不到sd卡是啥原因卡槽出现故障,行车记录仪的卡槽故障主要是由于读卡区的破损而造成存储

  • 蜀国是什么国家?蜀国是谁建立的介绍

    蜀国是什么国家?蜀国(221 -263),即蜀汉,也叫季汉。它是三国时期中国西南部的一个政权。东汉末年,天

  • 信用卡长期不用需要注销吗?信用卡长期不用会自动销户吗?

    信用卡长期不用需要注销吗信用卡长期不用的情况下最好的解决办法就是注销掉,这样可以避免很多麻烦。一

  • 环球要闻:从0到1、从1到N GMCC美芝“轻商赛道”实现跨越式增长

    作为全球家电行业关键部件压缩机供应商,美的工业技术旗下GMCC美芝在主题论坛、压缩机行业芯享沙龙、标准研讨及现场产品展示等环节与行业分

  • 每日报道:动力电池“退役潮”倒逼回收“提档”

    业内人士指出,退役动力电池含镍、钴、锰等重金属,如果不进行妥善处理,将会对环境造成不可估量的污染。总体来看,我国的动力电池回收利用

  • 天天快资讯:机器人产业快速增长 突破关键技术成首要目标

    从机器人市场主体来看,我国机器人市场主体不断优化壮大,各类型企业在中国市场上均取得良好的发展业绩,创新型企业持续涌现。据悉,截至20

  • 消息!合康新能以变频节能改造、电能质量管理、智能微电网等方案 赋能钢铁工业绿色发展

    在“双碳”背景下,对于传统高能耗的钢铁企业而言,提升运营及生产效率、将智能技术与现有生产结合、加大绿色能源占比及优化能源利用水平是

  • 世界热资讯!2022年工业机器人发展前景

    近日,2022年世界机器人大会发布了《中国机器人产业发展报告》,预计2022年中国机器人市场规模将达到174亿美元,5年平均增长率将达到22%。

  • 每日快报!全社会加速数字化,智慧交通高质量发展!

    坚持科技赋能,提升综合效率,驱动交通运输行业快速转变的“金钥匙”,正是数字化。如今,不论是高速公路还是城市道路,其出行强度、场景复

  • 环球关注:取代CMP工艺,牛津仪器开发SiC衬底加工新方法

    (资料图片仅供参考)近日,英国半导体设备厂商Oxford Instruments(牛津仪器)宣布开发了全新的SiC衬底加工新工艺,并验证了兼容HVM的SiC衬底

  • 【天天快播报】将大数据技术有效服务于智慧交通建设!

    “我每天上下班要坐1个小时公交车,现在有了公交优先廊道,早晚通勤能省下20多分钟,真是太方便了。”提起公交廊道,哈尔滨市民孙女士赞不

  • 全球观天下!“互联网+”新业态蓬勃发展,带动信息消费持续扩大升级

    光纤网络是利用光在玻璃或塑料制成的纤维中的全反射原理而达成的光传导工具接到公司或家或机房。利用交换机或其他终端转换为普通RJ45网线接

  • 【独家焦点】智能充电网络来临,充电机器人将成下一个爆点

    【资料图】随着智能充电网络的不断完善,自动充电机器人有望被大规模应用到各个场景当中,提升电动汽车补能体验。新能源汽车的推广普及离不

  • 环球热议:特斯拉AI视觉技术总监离职,特斯拉纯视觉技术方案是否会更迭?

    (资料图片)Andrej·Karpathy本科就读于加拿大多伦多大学,主修计算机科学与物理,辅修数学。在这里,他第一次接触到深度学习,聆听 Hinton

  • 旅游
    • 世界要闻:错过618,不要错过它

    • 世界快播:分布式光伏东风打开前景,微型逆变器“老树开新花”

    • 快看点丨同比增长近140%,前5月光伏新增装机23.71GW

    • 每日速读!2022年全球新能源汽车销量逼近千万:多家中国企业放弃燃油车

    热点