基于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模式中的类的实现层次结构来表现这些依赖于操作系统的部分。

相关推荐
夜色呦12 分钟前
实验室管理自动化:Spring Boot技术的应用
spring boot·自动化·php
《源码好优多》1 小时前
基于Java Springboot出租车管理网站
java·开发语言·spring boot
求积分不加C5 小时前
Spring Boot中使用AOP和反射机制设计一个的幂等注解(两种持久化模式),简单易懂教程
java·spring boot·后端
夜色呦5 小时前
Spring Boot实验室管理系统:高效科研管理解决方案
数据库·spring boot·php
枫叶_v6 小时前
【SpringBoot】26 实体映射工具(MapStruct)
java·spring boot·后端
2401_857617627 小时前
汽车资讯新趋势:Spring Boot技术解读
java·spring boot·后端
2401_857026237 小时前
Spring Boot技术在实验室信息管理中的应用
数据库·spring boot·php
liuxin334455667 小时前
科研实验室的数字化转型:Spring Boot系统
数据库·spring boot·php
写bug的羊羊7 小时前
Spring Boot整合Nacos启动时 Failed to rename context [nacos] as [xxx]
java·spring boot·后端
2402_857589368 小时前
实验室管理效率提升:Spring Boot技术的力量
java·spring boot·后端