设计模式-适配器模式|天天关注

来源: 腾讯云 时间:2023-05-04 16:18:27


(资料图片)

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

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

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

热门推荐

【环球热闻】InitContainer

2023-05-04   腾讯云

环球热点!Secret热更新

2023-05-04   腾讯云

五一假期北京接待游客900余万人次

2023-05-04   北京青年报官网

每日动态!ingress-Traefik

2023-05-04   腾讯云

Taint命令入门

2023-05-04   腾讯云

设计模式-原型模式(一)

2023-05-04   腾讯云

设计模式-抽象工厂模式

2023-05-04   腾讯云

焦点热议:枪王之王

2023-05-04   中国青年报

精彩看点:Taint和Toleration

2023-05-04   腾讯云

InitContainer

2023-05-04   腾讯云

设计模式-原型模式(二)

2023-05-04   腾讯云

为什么要用临时容器

2023-05-04   腾讯云

女人我最大2017_女人我最大官方网站

2023-05-04   青年汽车云小站

热门:kubernetes-Affinity示例

2023-05-04   腾讯云

设计模式-原型模式(一)

2023-05-04   腾讯云

Taint命令示例

2023-05-04   腾讯云

卧龙苍天陨落神兽召唤流套路分享

2023-05-04   游戏资讯网

ingress-Traefik_世界热消息

2023-05-04   腾讯云

设计模式-原型模式(二)

2023-05-04   腾讯云

Taint命令示例-热点评

2023-05-04   腾讯云

InitContainer 微速讯

2023-05-04   腾讯云

设计模式-原型模式(二)

2023-05-04   腾讯云

世界球精选!Taint命令示例

2023-05-04   腾讯云

InitContainer

2023-05-04   腾讯云

2023年吉林一本大学排名

2023-05-04   高考网整理

InitContainer|天天热讯

2023-05-04   腾讯云

中核集团发布2022年企业社会责任报告

2023-05-04   中国产业经济信息网

补可以组什么词_补的组词

2023-05-04   万能网

kubernetes-AntiAffinity_世界动态

2023-05-04   腾讯云

为你点赞!北京青年的闪亮青春

2023-05-04   北京日报客户端

kubernetes-AntiAffinity

2023-05-04   腾讯云

Taint和Toleration

2023-05-04   腾讯云

kubernetes-AntiAffinity_天天讯息

2023-05-04   腾讯云

kubernetes-Affinity示例

2023-05-04   腾讯云

Taint和Toleration-焦点热讯

2023-05-03   腾讯云

栀子花_柢

2023-05-03   互联网

世界新动态:Taint和Toleration

2023-05-03   腾讯云

Taint命令入门

2023-05-03   腾讯云

热的组词_热什么意思

2023-05-03   万能网

出实样啦!昌平这处安置房明年交房

2023-05-03   咱昌平的事儿

杀虫剂使用不当,易爆燃伤人

2023-05-03   北京青年报官网

kubernetes-AntiAffinity 热点评

2023-05-03   腾讯云

Taint和Toleration

2023-05-03   腾讯云

Taint命令入门|世界微动态

2023-05-03   腾讯云

Taint命令入门 动态焦点

2023-05-03   腾讯云

(图片故事)匠心如火炼珍馐

2023-05-03   新华社新闻

ThinkPHP-Session 的使用和配置

2023-05-03   腾讯云

使用SubPath

2023-05-03   腾讯云

Secret热更新-新要闻

2023-05-03   腾讯云

DaemonSet的更新和回滚(二)

2023-05-03   腾讯云

kubernetes-Affinity示例

2023-05-03   腾讯云

Taint命令入门

2023-05-03   腾讯云

Taint和Toleration 世界通讯

2023-05-03   腾讯云

资讯推荐:kubernetes-AntiAffinity

2023-05-03   腾讯云

Copyright   2015-2022 中国行业信息网版权所有  备案号:   联系邮箱:29 59 11 57 8@qq.com