基于SpringBoot设计模式之结构型设计模式·桥接模式

文章目录

介绍

将抽象部分与它的实现部分分离,使他们都可以独立地发生变化。

Bridge的意思是桥梁。就像在现实世界中,桥梁的功能是将河流的两侧连接起来一样,

Bridge模式的作用也是将两样东西连接起来,它们分别是类的功能层次结构和类的实现层次结构。

Bridge模式的作用是在类的功能层次结构类的实现层次结构之间搭建桥梁

开始

架构图

定义类的功能

java 复制代码
@Slf4j
public abstract class Platform {

    protected Video video;

    public Platform(Video video) {
        this.video = video;
    }

    public abstract void openVideo(Long videoId);
    public abstract void downloadVideo(Long videoId);

}
java 复制代码
@Slf4j
public class WindowsPlatform extends Platform {

    public WindowsPlatform(Video video) {
        super(video);
    }

    @Override
    public void openVideo(Long videoId) {


        log.info("在windows上,开始播放 video");

        video.show(videoId);


    }

    @Override
    public void downloadVideo(Long videoId) {

        log.info("开始针对视频源,将其转化为windows可播放源,进行下载");

        video.download(videoId);

    }
}
java 复制代码
@Slf4j
public class LinuxPlatform extends Platform {

    public LinuxPlatform(Video display) {
        super(display);
    }

    @Override
    public void openVideo(Long videoId) {


        log.info("在linux上,开始播放 video");

        video.show(videoId);


    }

    @Override
    public void downloadVideo(Long videoId) {

        log.info("开始针对视频源,将其转化为linux可播放源,进行下载");

        video.download(videoId);

    }
}

定义类的实现

java 复制代码
public interface Video {

    /**
     * 下载视频
     */
    void download(Long videoId);

    /**
     * 查看视频信息
     */
    void show(Long videoId);

}
java 复制代码
@Service("mp4Video")
@Slf4j
public class MP4Video implements Video {

    @Override
    public void download(Long videoId) {

        log.info("正在查询MP4格式的视频源");

        log.info("正在查询视频编号:{}", videoId);
        String url = "/usr/local/video/" + UUID.randomUUID();
        log.info("查询结束下载地址:{}", url);
    }

    @Override
    public void show(Long videoId) {

        log.info("正在查询MP4格式的视频源");

        log.info("正在查询视频编号:{}", videoId);
        String url = "/usr/local/video/" + UUID.randomUUID();
        log.info("查询结束,立即播放:{}", url);
    }
}
java 复制代码
@Service("movVideo")
@Slf4j
public class MOVVideo implements Video {

    @Override
    public void download(Long videoId) {

        log.info("正在查询MOV格式的视频源");

        log.info("正在查询视频编号:{}", videoId);
        String url = "/usr/local/video/" + UUID.randomUUID();
        log.info("查询结束下载地址:{}", url);
    }

    @Override
    public void show(Long videoId) {

        log.info("正在查询MOV格式的视频源");

        log.info("正在查询视频编号:{}", videoId);
        String url = "/usr/local/video/" + UUID.randomUUID();
        log.info("查询结束,立即播放:{}", url);
    }
}

测试样例

java 复制代码
@Slf4j
@SpringBootTest(classes = BridgeApplication.class)
public class TestBridge {

    @Resource
    private Map<String, Video> videoMap;

    @Test
    public void testLinuxPlatform() {

        Platform linuxPlatform1 = new LinuxPlatform(videoMap.get("mp4Video"));
        linuxPlatform1.openVideo(1L);
        linuxPlatform1.downloadVideo(1L);

        Platform linuxPlatform2 = new LinuxPlatform(videoMap.get("movVideo"));
        linuxPlatform2.openVideo(10L);
        linuxPlatform2.downloadVideo(10L);

    }

    @Test
    public void testWindowsPlatform() {

        Platform windowsPlatform1 = new LinuxPlatform(videoMap.get("mp4Video"));
        windowsPlatform1.openVideo(2L);
        windowsPlatform1.downloadVideo(2L);

        Platform windowsPlatform2 = new LinuxPlatform(videoMap.get("movVideo"));
        windowsPlatform2.openVideo(20L);
        windowsPlatform2.downloadVideo(20L);

    }

}

总结

Bridge模式的特征是将类的功能层次结构类的实现层次结构分离开了。将类的这两个层次结构分离开有利于独立地对它们进行扩展。当想要增加功能时,只需要在类的功能层次结构一侧增加类即可,不必对类的实现层次结构做任何修改。而且,增加后的功能可以被所有的实现使用。例如,在此样例中我们还可以将类的功能层次结构应用于软件所运行的操作系统上。如果我们将某个程序中依赖于操作系统的部分划分为 Windows版Macintosh 版Unix 版,那么我们就可以用 Bridge模式中的类的实现层次结构来表现这些依赖于操作系统的部分。

相关推荐
我真会写代码1 小时前
Java程序员常用设计模式详解(实战版)
java·开发语言·设计模式
IT 行者2 小时前
Spring Boot 4.0.5 正式发布:Bug 修复与依赖升级
spring boot·后端·bug
啥都想学点2 小时前
第18天:Springboot 项目搭建
java·spring boot·后端
Joker`s smile2 小时前
Spring Cloud Alibaba 基础入门实践
java·spring boot·后端·spring cloud
AI服务老曹3 小时前
掌握核心代码:基于 Spring Boot + Vue 的 AI 视频管理平台源码架构与二次开发实战(全开源/低代码/私有化)
vue.js·人工智能·spring boot
无籽西瓜a3 小时前
【西瓜带你学设计模式 | 第一期-单例模式】单例模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·单例模式·设计模式
imuliuliang3 小时前
Spring Boot(快速上手)
java·spring boot·后端
yashuk3 小时前
Spring Boot 3.4 正式发布,结构化日志!
java·spring boot·后端
weixin_7042660512 小时前
SpringBoot全注解开发指南
java·spring boot·mybatis
cliffordl13 小时前
设计模式(python)
python·设计模式