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

server/2024/10/22 3:35:12/

文章目录

  • 介绍
  • 开始
    • 架构图
      • 定义类的功能
      • 定义类的实现
    • 测试样例
  • 总结

介绍

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

  Bridge的意思是桥梁。就像在现实世界中,桥梁的功能是将河流的两侧连接起来一样,
Bridge模式的作用也是将两样东西连接起来,它们分别是类的功能层次结构和类的实现层次结构。
Bridge模式的作用是在类的功能层次结构类的实现层次结构之间搭建桥梁

开始

架构图

在这里插入图片描述

定义类的功能

@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);}
@Slf4j
public class WindowsPlatform extends Platform {public WindowsPlatform(Video video) {super(video);}@Overridepublic void openVideo(Long videoId) {log.info("在windows上,开始播放 video");video.show(videoId);}@Overridepublic void downloadVideo(Long videoId) {log.info("开始针对视频源,将其转化为windows可播放源,进行下载");video.download(videoId);}
}
@Slf4j
public class LinuxPlatform extends Platform {public LinuxPlatform(Video display) {super(display);}@Overridepublic void openVideo(Long videoId) {log.info("在linux上,开始播放 video");video.show(videoId);}@Overridepublic void downloadVideo(Long videoId) {log.info("开始针对视频源,将其转化为linux可播放源,进行下载");video.download(videoId);}
}

定义类的实现

public interface Video {/*** 下载视频*/void download(Long videoId);/*** 查看视频信息*/void show(Long videoId);}
@Service("mp4Video")
@Slf4j
public class MP4Video implements Video {@Overridepublic void download(Long videoId) {log.info("正在查询MP4格式的视频源");log.info("正在查询视频编号:{}", videoId);String url = "/usr/local/video/" + UUID.randomUUID();log.info("查询结束下载地址:{}", url);}@Overridepublic void show(Long videoId) {log.info("正在查询MP4格式的视频源");log.info("正在查询视频编号:{}", videoId);String url = "/usr/local/video/" + UUID.randomUUID();log.info("查询结束,立即播放:{}", url);}
}
@Service("movVideo")
@Slf4j
public class MOVVideo implements Video {@Overridepublic void download(Long videoId) {log.info("正在查询MOV格式的视频源");log.info("正在查询视频编号:{}", videoId);String url = "/usr/local/video/" + UUID.randomUUID();log.info("查询结束下载地址:{}", url);}@Overridepublic void show(Long videoId) {log.info("正在查询MOV格式的视频源");log.info("正在查询视频编号:{}", videoId);String url = "/usr/local/video/" + UUID.randomUUID();log.info("查询结束,立即播放:{}", url);}
}

测试样例

@Slf4j
@SpringBootTest(classes = BridgeApplication.class)
public class TestBridge {@Resourceprivate Map<String, Video> videoMap;@Testpublic 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);}@Testpublic 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模式中的类的实现层次结构来表现这些依赖于操作系统的部分。


http://www.ppmy.cn/server/133785.html

相关文章

Git小知识:合理的分支命名约定

前言&#xff1a;创建新分支时&#xff0c;对 Git 分支进行合理的命名非常重要&#xff0c;应选择有描述性的名称&#xff0c;因为它可以帮助团队成员更好地理解分支的目的和内容&#xff0c;以便将来回顾时能立即明白分支的目的。以下是一些常见的分支命名约定&#xff1a; 功…

opencv物体追踪,人脸识别案例分析

引言 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;广泛应用于图像和视频处理、人脸识别、物体追踪等领域。本文将通过实际案例&#xff0c;探讨如何使用OpenCV实现物体追踪和人脸识别功能。 物体追踪案例分析 物体追踪实现 我们将使用OpenCV的视频捕捉功能&am…

吴伟仁《英国文学史及选读》第一二册课后答案PDF

新经典高等学校英语专业系列教材《英国文学史及选读》根据英国文学历史的顺序结合作品选读编写而成&#xff0c;在历史部分&#xff0c;对英国文学史的每个阶段作了简明扼要的概述&#xff0c;而在作品选读部分则尽可能遴选了文学史上的重要作家和重要作品。教材内容丰富&#…

哪些方法可以缓解面试紧张?

面试紧张是许多人在面对重要职业机会时的一种常见情绪。虽然一定程度的紧张可能激发人的潜能&#xff0c;但过度的紧张则可能影响到面试表现。为了缓解面试紧张&#xff0c;以下是一些有效的方法&#xff1a; 1.充分准备&#xff1a; 深入了解公司背景、职位要求以及公司文化…

A Graph-Transformer for Whole SlideImage Classification文献笔记

基本信息 原文链接&#xff1a;[2205.09671] A graph-transformer for whole slide image classification (arxiv.org) 源码&#xff1a;https://github.com/vkola-lab/tmi2022 提出了一种融合了基于图的WSI表示和用于处理病理图像的视觉转换器&#xff0c;称为GTP&#xff…

鸿蒙测试-常见问题记录

文章目录 queuesize:0, msg:error: failed to install bundle. code:9568322 error: signature verification failed due to not trusted app source. queuesize:0, msg:error: failed to install bundle. code:9568322 error: signature verification failed due to not trust…

Vue2的依赖注入(跨级通信)基本使用

provide(提供) &#xff0c;inject(注入) 祖先级组件用provide传递数据,它的所有后代都可以通过inject取到数据 使用演示&#xff1a; //祖先组件 <template><div>父组件传的值&#xff1a;{{num}} </div> </template><script> //导入子组件 i…

工业自动化为什么依赖光耦隔离器 --- 腾恩科技

光耦合器隔离器在工业自动化中必不可少&#xff0c;可确保信号传输&#xff0c;同时保护敏感电子设备和人员免受高压影响。选择合适的光耦合器隔离器取决于对操作环境和隔离要求的了解。本文将重点介绍在为工业应用选择光耦合器隔离器时需要考虑的关键因素。 光耦合器隔离器在工…