Java设计模式中桥接模式是什么/桥接模式有什么用,怎么运用桥接模式

news2024/11/19 0:28:31

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用!

5.5 桥接模式

5.5.1 定义

将抽象与实现分离,使他们可以独立变化,即用组合关系来代替继承关系实现,从而降低抽象与实现两个可变维度耦合度

5.5.2 结构

  • 抽象化角色(Abstrction):定义抽象类,并包含一个对实现对象的引用
  • 扩展抽象化(Refined Abstraction)角色:抽象化角色子类,实现父类方法,并通过组合关系来调用实现化角色中业务方法
  • 实现化角色(Implementor):定义实现化角色接口,供扩展抽象化角色调用
  • 具体实现化角色(Concrete Implementor ):给出实现化角色接口具体实现

5.5.3 案例(播放器)

  • VideoFile
public interface VideoFile {  
     void decode(String fileName);  
}
  • AviVideoFile
public class AviVideoFile implements VideoFile{  
    @Override  
    public void decode(String fileName) {  
        System.out.println("AviVideo 视频文件: " + fileName);  
    }  
}
  • RmvVideoFile
public class RmvVideoFile implements VideoFile{  
    @Override  
    public void decode(String fileName) {  
        System.out.println("RmvVideoFile 视频文件: " + fileName);  
    }  
}
  • 抽象化角色
public abstract class OperatingSystem {  
//    声明videoFile文件  
    public VideoFile videoFile;  
    public OperatingSystem(VideoFile videoFile) {  
        this.videoFile = videoFile;  
    }  
    public abstract void play(String fileName);  
}
  • 抽象具体化角色
public class WindowsSystem extends OperatingSystem{  
    public WindowsSystem(VideoFile videoFile) {  
        super(videoFile);  
    }  
    @Override  
    public void play(String fileName) {  
        videoFile.decode(fileName);  
    }  
}
  • 抽象具体化角色
public class MacSystem extends OperatingSystem{  
    public MacSystem(VideoFile videoFile) {  
        super(videoFile);  
    }  
    @Override  
    public void play(String fileName) {  
        videoFile.decode(fileName);  
    }  
}
  • 类图![[Pasted image 20230104164508.png]]

5.5.4 优点

  • 提高了系统的可扩充性,且两维度扩充均不需要修改原有系统
  • 实现细节对客户透明

5.5.5 使用场景

  • 当某个类存在两个独立变化维度且两维度均需要扩展时
  • 当某系统不希望使用继承或因多层继承导致系统类个数急剧增加时
  • 当某系统需要在构件的抽象化角色和具体化角色之间增加更多灵活性时,可通过此模式在抽象层建立关联关系,避免在两个层次之间建立静态的继承关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

相参雷达(CSDN_0004_20220909)

文章编号:CSDN_0004_20220909 雷达信号处理中的一个基本操作是对样本进行积累,以提高SNR。积累的方式包括相参积累和非相参积累。相参积累是对复数信号(既包括幅度又包括相位)相加积累;非相参积累是对信号的幅度&#…

【时间复杂度与空间复杂度】衡量算法的标准,这篇文章让大家更深刻的理解时间复杂度和空间复杂度

前言: 大家好,我是良辰丫,今天和大家一起讨论一下时间复杂度与空间复杂度,往往来说,这两者是衡量算法好坏的标准,举个简单的例子,你想吃核桃了,用牙能弄开,用夹子也能弄开…

SAP灵活工作流场景配置及Demo测试

首先确保对应流程模板处于激活状态,并且事件已经激活 1. 在Fiori app 管理工作流中配置流程场景 地址:/sap/bc/ui2/flp?sap-client100&sap-languageZH#Workflow-showList 选择创建的灵活工作流模板,点击添加,开始配置场景 维护基本属性及…

JavaSE学习day2_02, IDEA的使用(重点)

4. idea 4.1 什么是idea? 是Java的集成开发工具,该工具把编写代码,编译,运行,调试等都集中在一起了。目前绝大多数企业编程用的执行环境. 特点: 自动保存、自动编译。 我们在使用的时候主要注重于两步…

SpringCloud微服务!!

目录 1.系统架构的演变 2.微服务简介 1.什么是微服务? 2.实现微服务的技术方案有哪些? 3.什么是SpringCloud? 4.微服务技术点【重点】 4.1服务治理、服务注册、服务发现 4.2 Eureka注册中心 4.2.1 Eureka介绍 4.2.2 Eureka 使用入门 4.2.3 Eureka的…

13_1、Java的IO流之File类的使用

一、File类的理解1、File的对象代表着一个文件或者一个文件目录。2、File类在java.io包下。3、File类中涉及文件或文件目录相关的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到对文件内部的内容的读取、写入等操作,如果需要对文件的内容进行…

2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」

PS:粉丝可以免费领源码,私信我或者评论666即可~~~~~~~~ 导读 | 世界杯虽已闭幕,但其带给我们的精彩,仿佛就在昨天,想一想,还是有一种爽劲,不知道大家是否也这样?转眼就到了2023年&a…

Java框架:Mybatis

文章目录一、Mybatis概述1.1概念1.2优点与缺点1.3MyBatis和Hibernate的区别1.4Mybatis的核心对象1.5Mybatis执行流程三、Mybatis的快速使用3.1开发环境3.2 创建一个maven项目3.3添加Maven依赖3.4MySQL创建user表3.5创建数据源database.properties文件3.6编写mybatis-config.xml…

H13-531云计算HCIE V2.0——1~400常错题和知识点总结

1~100 35、FusionStorage Block无法是被配置RAID的磁盘,一定要将RAID信息删除后, Fusionstrage block才能识别到这些磁盘? 错误 61、Ceilometer监控通过在计算节点部署Compute服务 84.(多选)在配置 FusionSphere OpenStack 时,可以用来实…

商务BD干多了,做一个无情的微信发消息机器人帮我发消息吧

1. 有没有那种做微信的伙伴,每天需要定点定时发消息? 2. 有没有那种做电商商务的朋友,每天需要发消息提醒达人商务们? 3. 有没有那种需要定时定点打卡,需要提醒自己要干啥的兄弟姐妹?** 那么有没有大冤种去…

如何获取电脑软件图标和app图标

如何获取电脑软件图标和app图标大家在写博客或者作图的时候经常会需要找到电脑软件图标或者app图标,如果从网上找有的图标并不清楚,今天给大家分享下,怎么快速的获取电脑软件图标和app图标,得到的图标也比较清楚。电脑软件图标获取…

【操作系统】操作系统的Buffer和Cache

文章目录1.Buffer和Cache的区别2.磁盘和文件写入操作案例3.磁盘和文件读取操作案例4.Cache和Buffer的命中案例1.Buffer和Cache的区别 (1)什么是Buffer Buffer指Linux内存的 Buffer cache(缓冲区)。Buffer为了让不同的速度的设备…

【迅为iMX6Q】开发板 Linux 5.15.71 SD卡 启动

开发环境 win10 64位VMware Workstation Pro 16ubuntu 22.04【迅为imx6q】开发板, 2G DDR linux-imx 下载 使用 NXP 官方提供的 linux-imx,代码地址为: https://github.com/nxp-imx/linux-imx 使用 git 下载 linux-imx, git cl…

Linux应用编程---6.无名管道

Linux应用编程—6.无名管道 6.1 pipe()函数使用详情 ​ 管道是进程之间进行通讯的一种方式。管道有两种,分别是:无名管道和有名管道。先看无名管道。管道创建函数是pipe(),在Linux终端输入man pipe。 图1 pipe()函数详情NAMEpipe, pipe2 - …

Mathorcup数学建模竞赛第六届-【妈妈杯】B题:小区车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

赛题描述 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。而小区内汽车停车位的分布对于小区居民的上下班出行影响很大。请建立数学模型,解决下列问题: 问题1:分析评判小区汽车停车位分布是否合理的几个关键指标,建立评判车位分布合理的数学…

mybatis官方文档之第一个mybatis程序实操

mysql数据库准备工作: 首先,我们需要在mysql数据库中,建立数据库和数据表: //创建数据库 create database my_batis; //创建表 create table students(id int not null,name varchar(30) default null,pwd varchar(30) default …

用移动激光扫描来估计树干直径的分割和树干校准法

Paper题目:Mobile Laser Scanning for Estimating Tree Stem Diameter Using Segmentation and Tree Spine Calibration Abstract 移动激光扫描 (MLS) 可以通过使用自动推导出树干中心位置和树干直径的算法来提高森林清查效率。在这项工作中,我们提出了…

远程控制软件– 向日葵使用教程

新冠疫情的严峻形式下,各地都延期复工,一时间远程办公,在家办公可谓非常火爆。然而,家里毕竟不是公司,很多的资料都在办公室电脑,甚至一些比较专业系统或者专属网络限制无法完成在家办公,这时候…

从加(解)密角度讲栅栏密码

目录普通型栅栏加密原理解密原理W型栅栏加密原理实例解密原理这今天在做新生赛的一道“只有倒着翻过十八层的篱笆才能抵达北欧神话的终点”,研究了很长时间的栅栏原理,flag没出来,而且自己对于普通和W型的加密解密整的有的蒙… 原先一篇文章里…

sentinel-流量控制

github地址:主页 alibaba/Sentinel Wiki GitHub 目录 概述基于 QPS/并发数的流量控制基于调用关系的流量控制 概述 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对…