前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(六)适配器模式

设计模式(六)适配器模式

作者头像
乐百川
发布2022-05-05 20:04:03
1740
发布2022-05-05 20:04:03
举报

前面介绍的几种设计模式都是创建型模式,用于以不同的方式创建对象。下面我们来看看适配器模式,这是一种结构型模式,用于在两个无关的接口之间搭建桥梁。

适配器模式主要用于在新旧代码直接转换。

直接看例子吧。假设我们有一个音乐播放器。

代码语言:javascript
复制
public interface MusicPlayer {
    void playMusic();
}

class MyMusicPlayer implements MusicPlayer {

    @Override
    public void playMusic() {
        System.out.println("播放音乐");
    }
}

然后还有一个视频播放器。

代码语言:javascript
复制
public interface VideoPlayer {
    void playVideo();
}

class MyVideoPlayer implements VideoPlayer{

    @Override
    public void playVideo() {
        System.out.println("播放视频");
    }
}

我们可以看到这两个接口的方法不同,现在我们希望以一种统一的方式播放音乐和视频。所以就需要类似下面的适配器。在适配器中,我们做了一些工作,将两个接口的方法包装,统一使用play方法调用。

代码语言:javascript
复制
public interface MediaPlayer {
    void play();
}

class MediaPlayerAdapter implements MediaPlayer {
    private MusicPlayer musicPlayer;
    private VideoPlayer videoPlayer;
    private boolean isMusicPlayer = false;
    private boolean isVideoPlayer = false;

    public MediaPlayerAdapter(Object player) {
        if (player instanceof MusicPlayer) {
            musicPlayer = (MusicPlayer) player;
            isMusicPlayer = true;
        } else if (player instanceof VideoPlayer) {
            videoPlayer = (VideoPlayer) player;
            isVideoPlayer = true;
        }
    }

    @Override
    public void play() {
        if (isMusicPlayer) {
            musicPlayer.playMusic();
        } else if (isVideoPlayer) {
            videoPlayer.playVideo();
        }
    }
}

我们可以看到,适配器的作用很强大,可以将不同接口联系起来,所以适配器模式的使用非常广泛。留意一下就会在很多地方发现它的身影。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档