设计模式-适配器模式

来源:腾讯云 时间:2023-05-04 18:21:49


【资料图】

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

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

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

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

X 关闭

设计模式-适配器模式

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

2023-05-04

第七史诗龙讨伐副本怎么打 第七史诗龙讨伐副本打法攻略

第七史诗龙讨伐副本怎么打第七史诗龙讨伐副本打法攻略,

2023-05-04

重点聚焦!ai写论文的网站(ai写论文的网站推荐)

easyeasy ai论文写作如何登录使用1、在应用程序里面,搜索就可以下载安装了在输入界面,点击输入框,在弹出

2023-05-04

太漂亮了!两湖治理岸线恢复效果图来了|焦点信息

两湖(甘棠湖、南门湖)是九江市市民休闲游玩的最佳地,不仅能欣赏到好风景更能放松心情。但近年来由于两湖

2023-05-04

观察:superme牌子_superme牌子怎么读

supreme牌子的读法是苏普瑞姆,也可以读做色普瑞姆。supreme属于美国街头服饰,是潮牌中的老大,在欧美等国

2023-05-04

全球热资讯!大众汽车一季度营收达760亿欧元

5月4日,大众汽车集团发布财报显示,得益于欧洲及北美市场复苏,今年一季度营收达760亿欧元,同比增长22%;

2023-05-04

人过五十,如果发现儿女找不到对象,请逼他们改掉这几个习惯_要闻

当我们过了五十岁之后,儿女长大了,自己也等着抱孙子、外孙了。可是很多家庭的发展,却不符合常理,儿女找

2023-05-04

成都温江区推出“月运动·越健康”城市运动计划 打造青年城市名片

中国青年报客户端讯(汪龙华中青报·中青网记者王鑫昕)青年家长带着小朋友牵着自制的主题风筝欢快奔跑,20

2023-05-04

体彩 题材_每日快报

今天来聊聊关于体彩,题材的文章,现在就为大家来简单介绍下体彩,题材,希望对各位小伙伴们有所帮助。1、

2023-05-04

跳水佳句有哪些_当前热点

跳水佳句有哪些

2023-05-04

Copyright   2015-2022 欧洲科技网版权所有   备案号:沪ICP备2022005074号-23   联系邮箱: 58 55 97 3@qq.com