适配器模式(java语言版)

前言:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。比如已经有A和B,在不改动A和B的情况下,使其中一方能获得另一方的支持。

JAVA语言版原型模式

创建为媒体播放器和更高级的媒体播放器创建接口:

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

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

创建更高级的媒体播放器的实现类:

public class VlcPlayer implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        System.out.println("正在播放的 vlc 文件名:" + fileName);
    }

    @Override
    public void playMp4(String fileName) {

    }
}

public class Mp4Player implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {

    }

    @Override
    public void playMp4(String fileName) {
        System.out.println("正在播放的 mp4 文件名:" + fileName);
    }
}

创建实现MediaPlayer 接口的适配器类:

public class MediaAdapter implements MediaPlayer {
    AdvancedMediaPlayer advancedMediaPlayer;

    public MediaAdapter(String audioType) {
        if (audioType.equalsIgnoreCase("vlc")) {
            advancedMediaPlayer = new VlcPlayer();
        } else if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer = new Mp4Player();
        }
    }

    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equalsIgnoreCase("vlc")) {
            advancedMediaPlayer.playVlc(fileName);
        } else if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer.playMp4(fileName);
        }
    }
}

创建实现了 MediaPlayer 接口的实体类:

public class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;

    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equalsIgnoreCase("mp3")) {
            System.out.println("正在播放的 mp3 文件名:" + fileName);
        } else if (audioType.equalsIgnoreCase("vlc")
                || audioType.equalsIgnoreCase("mp4")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println(audioType + " 类型的文件不支持");
        }
    }
}

使用 AudioPlayer 来播放不同类型的音频格式:

public class AdapterPatternDemo {
    public static void main(String[] args) {
        AudioPlayer audioPlayer = new AudioPlayer();
        audioPlayer.play("mp3", "如果没有如果");
        audioPlayer.play("mp4", "黑名单");
        audioPlayer.play("avi", "小鬼当家");
    }
}

输出结果:

正在播放的 mp3 文件名:如果没有如果
正在播放的 mp4 文件名:黑名单
avi 类型的文件不支持

猜你喜欢

转载自blog.csdn.net/qq_35386002/article/details/89326853