博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(六)适配器模式
阅读量:6760 次
发布时间:2019-06-26

本文共 1396 字,大约阅读时间需要 4 分钟。

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

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

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

public interface MusicPlayer {    void playMusic();}class MyMusicPlayer implements MusicPlayer {    @Override    public void playMusic() {        System.out.println("播放音乐");    }}

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

public interface VideoPlayer {    void playVideo();}class MyVideoPlayer implements VideoPlayer{    @Override    public void playVideo() {        System.out.println("播放视频");    }}

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

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

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

转载地址:http://egbeo.baihongyu.com/

你可能感兴趣的文章
Mozilla正计划修复Firefox遗留8年的漏洞
查看>>
Google C++单元测试框架(Gtest)系列教程之二——断言、函数测试
查看>>
Apex Design Patterns
查看>>
windows、linux创建子进程
查看>>
I.MX6 DNS 查看、修改方法
查看>>
供应链是什么意思
查看>>
HTML5的学习资料(开发设计原则)
查看>>
应用程序栏【WP7学习札记之九】
查看>>
utf-8引发的页面空白
查看>>
Controller的要求
查看>>
(转) Android中shape的使用
查看>>
制作WinPE
查看>>
mysql中文字段排序( 按拼音首字母排序)的查询语句
查看>>
[置顶] 某大型银行深化系统技术方案之九:核心层之流程数据管理
查看>>
MVC把随机产生的字符串转换为图片
查看>>
《OOC》笔记(0)——为何要看这本书
查看>>
User mode Linux
查看>>
SQL Server2016 原生支持JSON
查看>>
LINUX 性能工具使用
查看>>
Atitit.Hibernate于Criteria 使用汇总and 关系查询 and 按照子对象查询 o9o
查看>>