设计模式-适配器模式 当前速看


(资料图片仅供参考)

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

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

目标接口(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

环球短讯!涨停雷达:出版个股异动 皖新传媒触及涨停

今日走势皖新传媒(601801)今日触及涨停板,该股近一年涨停2次。异动原因揭秘1、4月28日皖新传媒发布2023

来源:同花顺2023-05-04

环球今日报丨虚拟地产价值“崩盘”? 专家:投机情绪下价格被高估

虚拟地产世界一片荒凉。日前,新京报贝壳财经记者登录虹宇宙平台发现,相比之前其场景更丰富,画面更高清有

来源:新京报2023-05-04

世界速看:武汉黄陂王家河街组织开展五四青年节系列活动

“清廉·青年”主题系列活动现场为深入学习贯彻党的二十大精神,扎实推进清廉王河建设,筑牢青年干部干事创

来源:人民网-湖北频道2023-05-04

中科创达(300496.SZ):公司在汽车领域已经有相关的解决方案

格隆汇5月4日丨有投资者在投资者互动平台向中科创达(300496 SZ)提问,“毫末智行发布了DriveGPT雪湖·海若

来源:格隆汇2023-05-04

雪人股份董秘回复:目前公司产品的应用领域广泛 每日资讯

雪人股份(002639)05月04日在投资者关系平台上答复了投资者关心的问题。

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

世界新消息丨WTI油价亚太盘初跌超7%

WTI油价亚太盘初跌超7%;WTI原油期货亚太盘初跌超7 14%,最低触及63 70美元,延续周三收跌4 27%的表现,使

来源:汇通财经2023-05-04

巴西副攻塔伊萨常规赛上凭借56%的扣球成功率排名最佳扣球的第一位 天天实时

今年33岁的巴西副攻塔伊萨在巴超联赛上恢复了昔日的霸气,常规赛上凭借56%的扣球成功率排名最佳扣球的第一

来源:互联网2023-05-04