当前位置: 首页 > news >正文

结构型-适配器模式

 定义:你可以将一个不兼容的对象包装在一个适配器中,从而使其与另一个类兼容。在软件工程中,适配器模式是一种结构型设计模式,它允许现有类的接口被用作另一个接口。它通常用于让现有类与其他类协同工作,而无需修改它们的源代码。

适用场景:

当你希望复用一些现有的类,但是他们的接口与当前系统不兼容时,可以使用适配器模式。适配器模式可以帮助你将一个类的接口转换成另一个类的接口,从而使的原本接口不兼容的类可以一起工作。

AdvancedMediaPlayer.java 高级媒体播放器接口

package adapter;/*** @Created: 2024-10-11 16:45* @Description: 高级媒体播放器接口*/
public interface AdvancedMediaPlayer {void playVlc(String fileName);void playAvi(String fileName);
}

VlcPlayer.java Vlc播放器

package adapter;/*** @Created: 2024-10-11 16:46* @Description: Vlc播放器*/
public class VlcPlayer implements AdvancedMediaPlayer{@Overridepublic void playVlc(String fileName) {System.out.println("playVlc");}@Overridepublic void playAvi(String fileName) {//什么也不做}
}

AviPlayer.java Avi播放器 

package adapter;/*** @Created: 2024-10-11 16:47* @Description: Avi播放器*/
public class AviPlayer implements AdvancedMediaPlayer{@Overridepublic void playVlc(String fileName) {//什么也不做}@Overridepublic void playAvi(String fileName) {System.out.println("play Avi");}
}
MediaAdapter.java 适配器类
package adapter;/*** @Created: 2024-10-11 16:49* @Description: 适配器类*/
public class MediaAdapter implements MediaPlayer {AdvancedMediaPlayer vlcPlayer = new VlcPlayer();AdvancedMediaPlayer aviPlayer = new AviPlayer();@Overridepublic void play(String videoType, String fileName) {if (videoType.equalsIgnoreCase("vlc")) {vlcPlayer.playVlc(fileName);} else if (videoType.equalsIgnoreCase("avi")) {aviPlayer.playVlc(fileName);}}
}

MediaPlayer.java 媒体播放接口

package adapter;/*** @Created: 2024-10-11 16:42* @Description: 媒体播放器接口*/
public interface MediaPlayer {void play(String videoType, String fileName);
}

 VideoPlayer.java 视频播放器

package adapter;/*** @Created: 2024-10-11 16:53* @Description: 视频播放器*/
public class VideoPlayer implements MediaPlayer {MediaPlayer mediaPlayer = new MediaAdapter();@Overridepublic void play(String videoType, String fileName) {if (videoType.equalsIgnoreCase("mp4")) {System.out.println("播放视频播放器类");} else if (videoType.equalsIgnoreCase("vlc") || videoType.equalsIgnoreCase("avi")) {mediaPlayer.play(videoType, fileName);} else {System.out.println("not support");}}
}

代码逻辑:原本项目程序有播放器MediaPalyer只有一个play方法,且只能播放mp4类的视频格式,但是现在要支持播放vlc和avi格式的高级的视频格式,于是开始开发代码,不动原来的代码

定义一个新的接口AdvancedMediaPlayer,实现类为 VlcPlayer和AviPlayer支持高级格式视频播放,定义一个MediaAdapter适配器类,实现了MedaiPlayer接口,并将请求转发给AdvancedMediaPlayer对象,通过引入MediaAdapter这个中间转发层,就可以原本不支持播放高级视频的播放器,支持高级格式的视频播放;最后VideoPlayer即能播放mp4 ,有能使用MediaAdapter适配器类播放vlc和avi格式;

适配器设计模式通过创建一个中间层,使得两个不兼容的接口可以协同工作。在实际开发中,适配器模式可以帮助我们复用已有代码,提高系统的灵活性和可维护性。

参考B站视频:

适配器(Adapter)设计模式_哔哩哔哩_bilibili


http://www.mrgr.cn/news/50692.html

相关文章:

  • 【MySQL】表的操作
  • 从零实现llama3(学习)
  • 海外云手机:出海电商养号智能化方案
  • 【C++基础知识——C++ 头文件中能用std::cout输出信息吗?】
  • 智能驾驶仿真网络:现实与虚拟交汇的基石
  • 体面厂的分手应该体面
  • 基于Springboot+Vue的商城积分系统(含源码数据库)
  • 在Openshift(K8S)上通过EMQX Operator部署Emqx集群
  • 实景三维赋能自然资源精细化管理创新
  • 详解STL之 AVL tree --- “额外平衡条件的”二叉搜索树
  • Javascript扩展符号(...)使用说明
  • 腾讯图标点选模型识别
  • 10.3.1 QGIS多边形类型注释(Annotation)的应用与二次开发实现
  • 关于移动通信网络中各个组成部分的基础入门
  • 探索前端世界的奇妙库——带你领略奇奇怪怪的编程乐趣
  • 雷池社区版配置遇到问题不要慌,查看本文解决
  • Java面试宝典-WEB学习
  • Windows server 2022datacenter版本的j激活过程
  • 数据质量差的代价是什么?
  • TestNG二开总结 - (3) 开发自己的listener TestListenerAdapter