适配器模式

适配器模式

简介

适配器模式,旨在解决两个不相关的接口能够在一起工作,起到一个兼容的作用。

举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4

优点

1、可以让任何两个不相关的类一起运行

2、提高类的复用

3、增加了类的透明度

4、灵活性好

缺点

1、过多的使用适配器,会使系统非常的零乱,不易整体把握

UML

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRuy5Caz-1598771149835)(./image/3.png)]

实现

public interface MediaPlayer {
    public void play(String audioType,String fileName);
}
public interface AdvanceMediaPlayer {
    public void playMp4(String fileName);
    public void playVlc(String fileName);
}
public class Mp4Player implements AdvanceMediaPlayer{
    @Override
    public void playMp4(String fileName) {
        System.out.println("mp4播放器播放文件:"+fileName);
    }

    @Override
    public void playVlc(String fileName) {
        //什么都不用做
    }
}
public class VlcPlayer implements AdvanceMediaPlayer {
    @Override
    public void playMp4(String fileName) {
        //什么都不用做
    }

    @Override
    public void playVlc(String fileName) {
        System.out.println("vlc播放器播放文件:"+fileName);
    }
}
public class MediaAdapter implements MediaPlayer{
    AdvanceMediaPlayer advanceMediaPlayer;
    @Override
    public void play(String audioType, String fileName) {
        if ("vlc".equalsIgnoreCase(audioType)){
            advanceMediaPlayer.playVlc(fileName);
        }else if ("mp4".equalsIgnoreCase(audioType)){
            advanceMediaPlayer.playMp4(fileName);
        }
    }
    public MediaAdapter(String audioType){
        if ("vlc".equalsIgnoreCase(audioType)){
            advanceMediaPlayer = new VlcPlayer();
        }else if ("mp4".equalsIgnoreCase(audioType)){
            advanceMediaPlayer = new Mp4Player();
        }
    }
}
public class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;
    @Override
    public void play(String audioType, String fileName) {
        if ("mp3".equalsIgnoreCase(audioType)){
            System.out.println("mp3播放器播放文件:"+fileName);
        }else if ("mp4".equalsIgnoreCase(audioType) || "vlc".equalsIgnoreCase(audioType)){
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType,fileName);
        }
    }
}
public class Client {
    public static void main(String[] args) {
        AudioPlayer audioPlayer = new AudioPlayer();
        audioPlayer.play("mp3","平凡之路");
        audioPlayer.play("mp4","mp4文件");
        audioPlayer.play("vlc","vlc文件");
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值