适配器模式是一种结构型设计模式,它将一个类的接口转换成另一个客户端所期望的接口。适配器模式通常用于将旧接口适配到新接口上,或将不兼容的类组合在一起工作。

以下是一个适配器模式的实例:

假设我们有一个音频播放器类AudioPlayer,它可以播放MP3格式的音乐。现在我们想要让这个播放器也能播放其他格式的音乐,比如VLC和MP4格式。但是这些格式的音乐文件的播放方法与MP3不同,我们需要一个适配器来将这些格式的音乐文件转换成MP3格式,然后再使用AudioPlayer播放。

首先,我们定义一个MediaPlayer接口,它包含了播放音乐的方法:

public interface MediaPlayer {
    public void play(String audioType, String fileName);
}

然后,我们定义一个AdvancedMediaPlayer接口,它包含了播放VLC和MP4格式音乐的方法:

public interface AdvancedMediaPlayer {
    public void playVlc(String fileName);
    public void playMp4(String fileName);
}

我们需要实现一个适配器,将AdvancedMediaPlayer接口转换成MediaPlayer接口。这个适配器类我们称之为MediaAdapter:

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);
        }
    }
}

最后,我们实现AudioPlayer类,它可以播放MP3格式的音乐,以及使用MediaAdapter适配器播放VLC和MP4格式的音乐:

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适配器播放VLC和MP4格式的音乐
        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');
        }
    }
}

现在我们可以使用AudioPlayer播放MP3、VLC和MP4格式的音乐了:

AudioPlayer audioPlayer = new AudioPlayer();

audioPlayer.play('mp3', 'beyond the horizon.mp3');
audioPlayer.play('mp4', 'alone.mp4');
audioPlayer.play('vlc', 'far far away.vlc');
audioPlayer.play('avi', 'mind me.avi');

输出:

Playing mp3 file. Name: beyond the horizon.mp3
Playing mp4 file. Name: alone.mp4
Playing vlc file. Name: far far away.vlc
Invalid media. avi format not supported

这就是适配器模式的一个实例,通过适配器,我们可以让原本不兼容的类一起工作。

适配器模式实例详解:让不同格式的音频文件都能播放

原文地址: https://www.cveoy.top/t/topic/jEpF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录