设计模式-适配器模式


(资料图片)

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

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

目标接口(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方法来播放该格式的音频文件。

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

关键词:

为您推荐

设计模式-适配器模式

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

来源:腾讯云2023-05-04

天天要闻:荣盛石化(002493):Q1业绩环比改善 迎接底部向上

荣盛石化(002493):Q1业绩环比改善迎接底部向上

来源:国泰君安证券股份有限公司2023-05-04

国家市场监管总局等十一部门:强化医疗美容机构资质审核 天天快资讯

5月4日,国家市场监管总局、公安部、商务部、国家卫健委、海关总署、国家税务总局、国家网信办、国家中医药

来源:北京商报2023-05-04

5月4日长江传媒涨停分析:知识付费,传媒,知识产权概念热股_播资讯

长江传媒涨停收盘,收盘价10 49元。该股于9点25分涨停,未打开涨停,截止收盘封单资金为3 93亿元,占其流通

来源:证券之星2023-05-04

重度手汗症怎么办?重庆西区医院帮助手汗症妈妈恢复正常

近日,重庆西区医院胸外科接诊了一名27岁的重度手汗症患者,经过手术治疗,目前患者双手出汗情况恢复正常,

来源:金台资讯2023-05-04

【世界热闻】中远海控回应业绩下滑:市场恢复常态,营收高增不可能长期维持

“海王”中远海控今年营业收入排在第41位。公司一季度营业收入473 53亿元,同比下滑55 13%,退出千亿阵营。

来源:36氪2023-05-04

河南文旅市场“五一”假期揽金超310亿元 城市文化游唱主角

记者4日从河南省文化和旅游厅获悉,刚刚落幕的“五一”小长假,河南省共接待游客5518万人次,与2019年同比

来源:中国新闻网2023-05-04

5月4日山东利华益集团油品报价下滑_当前观察

产品5月3日5月4日涨跌单位:元 吨0 柴油73207240-80元 吨92 汽油85008400-100元 吨95 汽油86508550-100元 吨5月4日

来源:生意社2023-05-04