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

相关推荐
EatFan2 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
长按助力退休8 小时前
设计模式实战,这 5 个最常用
设计模式
凤山老林8 小时前
Spring Boot 集成 iText 7 实现动态 PDF 生成与电子签章:合同、报表场景实战
spring boot·后端·pdf·itext7·电子签章
卓怡学长9 小时前
w204基于springbo旅行社签证代理服务系统
java·spring boot·spring·intellij-idea
qwfy9 小时前
我要用 AI-native 架构,从零重建一套制造业 ERP/MES
vue.js·spring boot·架构
vipxieliang9 小时前
ValidX 在微服务架构中的验证策略
java·spring boot
❀͜͡傀儡师9 小时前
20 年沉淀,CAS 8.0 重新定义企业级 SSO:适配 JDK 25 与 Spring Boot 4.1
java·开发语言·spring boot
牧瀬クリスだ9 小时前
Spring统一功能处理
java·spring boot·spring·状态模式
Carl_奕然10 小时前
【智能体】Agent的四种设计模式之:Multi-Agent Collaboration
设计模式
Lost of 程序猿10 小时前
建造者模式实战:告别“十参数构造函数“的数据导出任务
后端·设计模式·c#·asp.net