当前位置: 首页> 汽车> 新车 > java设计模式(七)适配器模式(Adapter Pattern)

java设计模式(七)适配器模式(Adapter Pattern)

时间:2025/7/9 21:14:10来源:https://blog.csdn.net/weixin_70044963/article/details/140011737 浏览次数: 0次

1、模式介绍:

        适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另外一个接口。适配器模式通常用于需要复用现有的类,但是接口与客户端的要求不完全匹配的情况。它包括两种形式:类适配器模式和对象适配器模式。

2、应用场景:

         系统需要使用现有的类,而这些类的接口不符合需求。
        不想修改现有的接口,而又需要复用该接口的情况。
        多个类似功能的接口需要统一。

3、优点:

        增加了类的透明性和复用性:将具体的实现封装在适配器中,对客户端来说是透明的,同时提高了被适配类的复用性。
        灵活性好:通过适配器,可以在不改变原有代码的基础上增加新的适配器类,符合开闭原则。

4、缺点:

        过多使用适配器,会让系统非常零乱。
        增加系统的复杂性
:因为增加了额外的适配器,可能会增加系统的理解难度

5、代码实现:

/*** 适配接口** @author FM_南风* @date 2024/6/27 13:53*/
public interface MediaPlayer {void play(String mediaType, String fileName);
}/*** 被适配者** @author FM_南风* @date 2024/6/27 13:54*/
public class AudioPlayer implements MediaPlayer{@Overridepublic void play(String mediaType, String fileName) {if (mediaType.equalsIgnoreCase("mp3")) {System.out.println("播放MP3文件: " + fileName);} else {System.out.println("使用" + mediaType + "媒体播放");}}
}/*** 新适配接口** @author FM_南风* @date 2024/6/27 13:55*/
public interface AdvancedMediaPlayer {void playVlc(String fileName);void playMp4(String fileName);
}/*** Mp4播放器实现新的接口** @author FM_南风* @date 2024/6/27 13:56*/
public class Mp4Player implements AdvancedMediaPlayer{@Overridepublic void playVlc(String fileName) {}@Overridepublic void playMp4(String fileName) {System.out.println("播放MP4文件: " + fileName);}
}/*** Vlc播放器实现新的接口** @author FM_南风* @date 2024/6/27 13:56*/
public class VlcPlayer implements AdvancedMediaPlayer {@Overridepublic void playVlc(String fileName) {System.out.println("播放Vlc文件: " + fileName);}@Overridepublic void playMp4(String fileName) {}
}/*** 适配器类,实现目标接口并持有被适配者的引用** @author FM_南风* @date 2024/6/27 13:57*/
public class MediaAdapter implements MediaPlayer{AdvancedMediaPlayer advancedMusicPlayer;public MediaAdapter(String mediaType) {if (mediaType.equalsIgnoreCase("vlc")) {advancedMusicPlayer = new VlcPlayer();} else if (mediaType.equalsIgnoreCase("mp4")) {advancedMusicPlayer = new Mp4Player();}}@Overridepublic void play(String mediaType, String fileName) {if (mediaType.equalsIgnoreCase("vlc")) {advancedMusicPlayer.playVlc(fileName);} else if (mediaType.equalsIgnoreCase("mp4")) {advancedMusicPlayer.playMp4(fileName);}}
}/*** 应用** @author FM_南风* @date 2024/6/27 13:58*/
public class AdapterClient {public static void main(String[] args) {MediaPlayer audioPlayer = new AudioPlayer();audioPlayer.play("mp3", "音乐.mp3");audioPlayer.play("mp4", "视频.mp4");audioPlayer.play("vlc", "视频.vlc");audioPlayer.play("avi", "视频.avi"); // Unsupported media type}
}

6、结果展示:

关键字:java设计模式(七)适配器模式(Adapter Pattern)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: