适配器模式是一种结构型设计模式,允许不兼容对象协同工作,它将一个接口转换为另一个,使对象能够顺利交互。对象适配器通过创建包含被适配对象的适配器对象,并实现目标接口,实现适配器模式。在一个实战案例中,通过适配器模式,客户端(如 mediaplayer)可以播放高级格式的媒体(如 vlc),尽管其本身仅支持普通媒体格式(如 mp3)。

Java 设计模式之适配器模式的妙用
简介
适配器模式是一种结构型设计模式,它允许一个对象与另一个具有不兼容接口的对象协同工作。换句话说,它将一个接口转换为另一个接口,使原本不兼容的两个对象能够顺利交互。
立即学习“Java免费学习笔记(深入)”;
结构
适配器模式的结构如下图所示:
比格设计
比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器
124 查看详情
+--------------------+ | Target | +--------------------+ ^ | +--------------------+ | Adaptee(被适配) | +--------------------+ ^ | +----------------------------+ | Object Adapter (对象适配器) | +----------------------------+ | | _______________/
Target (目标):定义客户端需要的接口。Adaptee (被适配):定义要被适配的接口。Adapter (适配器):将 Adaptee 接口转换为 Target 接口,从而使客户端能够使用 Adaptee。
对象适配器
对象适配器是一种实现适配器模式的简单方式。它创建了一个新的适配器对象,该对象将 Adaptee 对象包含在其中并实现 Target 接口。
// Target 接口interface Target { int operation();}// Adaptee 接口interface Adaptee { int specificOperation();}// Adapter (对象适配器)class Adapter implements Target { private final Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public int operation() { return adaptee.specificOperation(); }}
实战案例
假设我们有两个类:MediaPlayer 和 AdvancedMediaPlayer。MediaPlayer 类负责播放普通格式的媒体(如 MP3),而 AdvancedMediaPlayer 类负责播放高级格式的媒体(如 VLC)。我们要使用适配器模式来使 MediaPlayer 类能够播放高级格式的媒体。
class MediaPlayer { public void playMP3(String filename) { System.out.println("Playing MP3: " + filename); }}class AdvancedMediaPlayer { public void playVLC(String filename) { System.out.println("Playing VLC: " + filename); }}class MediaAdapter implements MediaPlayer { private final AdvancedMediaPlayer advancedMediaPlayer; public MediaAdapter(AdvancedMediaPlayer advancedMediaPlayer) { this.advancedMediaPlayer = advancedMediaPlayer; } @Override public void playMP3(String filename) { advancedMediaPlayer.playVLC(filename); }}// 客户调用MediaPlayer audioPlayer = new MediaAdapter(new AdvancedMediaPlayer());audioPlayer.playMP3("FileName.vlc");
输出:
Playing VLC: FileName.vlc
通过使用适配器模式,我们在不修改 MediaPlayer 类的源代码的情况下,扩展了它的功能,使其能够播放高级格式的媒体。
以上就是Java设计模式之适配器模式的妙用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/563665.html
微信扫一扫
支付宝扫一扫