设计模式-适配器模式

来源:腾讯云  发布时间:2023-05-04 10:26:58 


【资料图】

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

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

目标接口(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 10:26:58

每日资讯:直击五一车市:有油车优惠超10万,特斯

直击五一车市:有油车优惠超10万,特斯拉涨价反催旺人气,优惠,比亚迪,4s店,凯美瑞,电动车,广汽丰田,五一车更多

2023-05-04 10:00:31

环球热推荐:假期“人从众”,里面装下了许多温暖

假期总是过得飞快,转眼“五一”小长假已是尾声。  这个假期你是怎么过的?你也是“人从众”里的一员吗?更多

2023-05-04 09:47:25

峨眉钰泉品牌介绍_峨眉钰泉饮用水

四川华兴玉泉实业有限公司是双发信达集团投资的子公司,注册资本5000万元人民币。是一家旨在从事高端矿泉水更多

2023-05-04 09:21:44

“两强争霸” 五一档票房15亿元收官-环球资讯

一档收官。据灯塔专业版,截至5月3日20时30分,2023年五一档票房突破15亿元,其中,电影《人生路不熟》《长更多

2023-05-04 08:59:47

如何打开mdf文件_打开mdf文件的方法

欢迎观看本篇文章,小柴来为大家解答以上问题。如何打开mdf文件,打开mdf文件的方法很多人还不知道,现在让更多

2023-05-04 07:57:11

全球视讯!全球瞩目。

国内数据方面,PMI再次跌破50的枯荣线,从数据分析来看,一季度经济复苏主要是消费拉动,制造业等内生的经更多

2023-05-04 07:00:19

多因素打压风险偏好假日期间外围市场震荡走低-环

当日恒生指数跌1更多

2023-05-04 05:58:11

新消息丨五一出行热度飙升 近九成受访者这个小长

中青报·中青网记者杜园春刚刚过去的五一小长假,人们的出游需求得到了充分释放,各地热门景区人流量高涨。更多

2023-05-04 04:43:00

中国和韩国足球比赛结果_中国和韩国

1、中国强大,韩国实力比中国低了二个档次,比地盘中国大他太多。2、无论是装备还是武器先进程度也是远远凌更多

2023-05-04 02:06:08