《适配器模式》

一、什么是适配器模式 

适配器模式,是两个不兼容接口之间的桥梁,他结合了两个独立接口的功能。

举个生活中例子:播放器有音频播放器和视频播放器,音频播放器只能播放音频,视频播放器只能播放视频,那怎么通过视频播放器去播放音频呢,可以通过适配器的方式实现。

 

 

二、如何实现适配器模式

以下通过代码实现上述例子的功能:


/*
音频播放器接口
 */
interface AudioPlayer {
    void playMp3();

    void PlayMp4();
}


/*
视频播放器接口
 */
interface VideoPlayer {
    void playVideo();
}

/*
adapter接口
 */
interface MediaAdapter {
    void playMedia(String mediaType);
}

/*
mp3播放器
 */
class Mp3Player implements AudioPlayer {

    @Override
    public void playMp3() {
        System.out.println("Mp3播放器,可以播放Mp3音乐");
    }

    @Override
    public void PlayMp4() {
        // 不实现功能
    }
}

/*
Mp4播放器
 */
class Mp4Player implements AudioPlayer {

    @Override
    public void playMp3() {
        // 不实现功能
    }

    @Override
    public void PlayMp4() {
        System.out.println("MP4播放器,可以播放MP4文件");
    }
}


/*
媒体适配器
 */
class MediaPlayer implements MediaAdapter {
    AudioPlayer audioPlayer;

    /**
     * 根据传入的媒体判断是mp3还是MP4
     * @param mediaType 媒体类型
     */
    @Override
    public void playMedia(String mediaType) {
        if ("mp4".equalsIgnoreCase(mediaType)) {
            audioPlayer = new Mp4Player();
            audioPlayer.PlayMp4();
        } else if ("mp3".equalsIgnoreCase(mediaType)) {
            audioPlayer = new Mp3Player();
            audioPlayer.playMp3();
        }
    }
}

/*
avi视频播放器,继承MediaAdapter类就可以实现播放Mp3和Mp4文件
 */
class AviPlayer extends MediaPlayer implements VideoPlayer {

    @Override
    public void playVideo() {
        System.out.println("avi播放器,播放Avi文件");
    }
}


/**
 * 具体实现调用
 */
public class AdapterDemo {
    public static void main(String[] args) {
        AviPlayer aviPlayer = new AviPlayer();

        // 播放avi文件
        aviPlayer.playVideo();
        // 播放mp4文件
        aviPlayer.playMedia("mp4");
        // 播放mp3文件
        aviPlayer.playMedia("mp3");
    }
}

输出结果如下

avi播放器,播放Avi文件
MP4播放器,可以播放MP4文件
Mp3播放器,可以播放Mp3音乐

三、适配器模式的优缺点

适配器模式具有以下优点:

1、可以将两个没有任何关联的类一起运行。

2、提高了类的复用

3、增加了类的透明度

4、灵活性好

但也有缺点:

1、过多使用适配器会导致系统凌乱,不易于整体进行把握。

2、java只允许继承一个类,因此至多继承一个适配器类。

使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值