当前位置: 首页 > news >正文

Java设计模式——桥连模式

桥接模式简单来说就是通过将抽象部分和具体部分分离,使它们可以独立地变化。如果你的一个类存在多个变化维度(如抽象和具体的实现)。若使用继承来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。并且,继承会将抽象部分和具体部分紧密耦合,不利于独立地进行扩展和变化。此时不妨考虑使用桥连模式。

假定一个不同的级别信息发送方式的例子

/*** 抽象消息*/
public interface IMessage {void send(String message,String addressee);
}/*** 抽象消息类*/
public abstract class AbstractMessage {protected IMessage iMessage;public AbstractMessage(IMessage iMessage) {this.iMessage = iMessage;}public void sendMessage(String message, String addressee) {iMessage.send(message, addressee);}
}/*** 短信消息*/
public class SmsMessage implements IMessage{@Overridepublic void send(String message, String addressee) {System.out.println("公司专用短息 -> " + message + ",收件人 -> " + addressee);}
}/*** 邮件消息*/
public class EmailMessage implements IMessage {@Overridepublic void send(String message, String addressee) {System.out.println("企业邮箱发送邮件 -> " + message + ",收件人 -> " + addressee);}
}/*** 普通消息*/
public class NormalMessage extends AbstractMessage{public NormalMessage(IMessage iMessage) {super(iMessage);}@Overridepublic void sendMessage(String message, String addressee) {//普通消息直接调用父类方法super.sendMessage(message, addressee);}
}/*** 紧急消息*/
public class UrgentMessage extends AbstractMessage {public UrgentMessage(IMessage iMessage) {super(iMessage);}@Overridepublic void sendMessage(String message, String addressee) {message = "紧急通知 :" + message;super.sendMessage(message, addressee);//模拟特殊处理...}
}

编写测试用例

    /*** 桥连器模式-消息桥连测试*/@Testpublic void testMessageBridge() {IMessage message = new SmsMessage();AbstractMessage abstractMessage = new NormalMessage(message);abstractMessage.sendMessage("放假通知,即日起连休三天!", "全体员工");message = new EmailMessage();abstractMessage = new UrgentMessage(message);abstractMessage.sendMessage("出现生产问题,请尽快处理!", "王经理");}

相关文章:

Java设计模式——桥连模式

桥接模式简单来说就是通过将抽象部分和具体部分分离,使它们可以独立地变化。如果你的一个类存在多个变化维度(如抽象和具体的实现)。若使用继承来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。并且&…...

数据结构与算法:堆排序和TOP-K问题

朋友们大家好,本节内容来到堆的应用:堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序,冒泡排序,快速排序(qsor…...

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备(UE) …...

文件操作与IO(3) 文件内容的读写——数据流

目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本: 第二个带有byte数组的版本: 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本: 第二个写入整个数组版本: …...

《PyTorch深度学习实践》第十一讲卷积神经网络进阶

一、 1、卷积核超参数选择困难,自动找到卷积的最佳组合。 2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义…...

Ansible的playbook的编写和解析

目录 什么是playbook Ansible 的脚本 --- playbook 剧本 实例部署(使用playbook安装启动httpd服务) 1.编写一个.yaml文件 在主机下载安装http,将配置文件复制到opt目录下 运行playbook 在192.168.17.77主机上查看httpd服务是否成功开启…...

[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”

已经被VScode ssh毒死好几次了,都是执行命令意外中断,然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器,VSCode可以连上了, 系统ssh还是不行,报错“kex_exchange_identification: read: Connecti…...

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…...

【动态规划入门】最长上升子序列

每日一道算法题之最长上升子序列 一、题目描述二、思路三、C代码 一、题目描述 题目来源:LeetCode 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 输入格式 第一行包含整数 N。 第二行包含 N个整数,表示完整序列。 输出格式 输出一个整数…...

LabVIEW眼结膜微血管采集管理系统

LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统,以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能,有效缩短了图像采集时间,提高了图像质量&#…...

通过GitHub探索Python爬虫技术

1.检索爬取内容案例。 2.找到最近更新的。(最新一般都可以直接运行) 3.选择适合自己的项目,目前测试下面画红圈的是可行的。 4.方便大家查看就把代码粘贴出来了。 #图中画圈一代码 import requests import os import rewhile True:music_id input("请输入歌曲…...

【Python】-----基础知识

注释 定义:让计算机跳过这个代码执行用三个单引号/双引号都表示注释信息,在Python中单引号与双引号没有区别,但必须是成对出现 输出与输入 程序是有开始,有结束的,程序运行规则:从上而下,由内…...

如何学习、上手点云算法(二):点云处理相关开源算法库、软件、工具

写在前面 本文内容 一些用于点云处理的开源算法库、软件介绍,主要包含: CloudCompare, MeshLab, PCL, Open3D, VTK, CGAL等 不定时更新 平台/环境 Windows10, Ubuntu1804, CMake, Open3D, PCL 转载请注明出处: https://blog.csdn.net/qq_41…...

为什么会对猫毛过敏?如何缓解?浮毛克星—宠物空气净化器推荐

猫咪过敏通常是因为它们身上的Fel d1蛋白质导致的,这些蛋白质附着在猫咪的皮屑上。猫咪舔毛的过程会带出这些蛋白质,一旦接触就可能引发过敏症状,比如打喷嚏等。因此,减少空气中的浮毛数量有助于减轻过敏现象。猫用空气净化器可以…...

Linux学习-etcdctl安装

etcdctl3.5下载链接 1. 先通过上面链接下载gz包2. 解压 [rootk8s-master ~]# tar xf etcd-v3.5.11-linux-amd64.tar.gz [rootk8s-master etcd-v3.5.11-linux-amd64]# ls Documentation etcd etcdctl etcdutl README-etcdctl.md README-etcdutl.md README.md READMEv2-e…...

Qt应用软件【文件篇】读写文件技巧

文章目录 简介按照偏移读文件按照偏移写文件Qt按行写文件Qt按行读文件注意事项指定文件编码格式UTF8转GBK简介 Qt提供了丰富的API来处理文件读写操作,使得读写文件变得简单。 按照偏移读文件 QFile file("example.txt"); if (file.open(QIODevice::ReadOnly)) {q…...

GO常量指针

Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。 由于编译时的限制&#x…...

微服务间通信重构与服务治理笔记

父工程 依赖版本管理,但实际不引入依赖 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…...

unity 场景烘焙中植物叶片(单面网络)出现的白面

Unity版本 2021.3.3 平台 Windows 在场景烘焙中烘焙植物的模型的时候发现植物的叶面一面是合理的&#xff0c;背面是全白的&#xff0c;在材质球上勾选了双面烘焙&#xff0c;情况如下 这个问题可能是由于植物叶片的单面网格导致的。在场景烘焙中&#xff0c;单面网格只会在一…...

网工内推 | 国企运维,年薪最高30W,RHCE认证优先

01 上海华力微电子有限公司 招聘岗位&#xff1a;系统运维资深/主任工程师 职责描述&#xff1a; 1、负责IT基础设施&#xff08;包括服务器、存储、中间件等系统基础技术平台&#xff09;的设计建设和日常运维管理&#xff1b; 2、负责生产、开发和测试环境的技术支持&#x…...

MapReduce数据倾斜解决方案

前言 在MapReduce生产环境中&#xff0c;数据倾斜是最常见也最致命的性能杀手。一个看似完美的分布式程序&#xff0c;可能因为某个ReduceTask处理的数据量远超其他任务&#xff0c;导致整个作业卡死数小时甚至失败。本文将从倾斜现象识别、根因分析、六大解决方案到实战案例&…...

毕业设计精选【芳心科技】无人机定点投放控制

实物效果图&#xff1a;实现功能&#xff1a;本次设计的目的是实现无人机在空中投放物品的落点计算&#xff0c;系统的核心是单片机&#xff0c;它控制本系统的各种功能&#xff0c;所以它的选择是非常重要的&#xff0c;在本设计中选用的是GD32F103C8T6单片机&#xff0c;这款…...

运放电源端串联磁珠

在运放电源端串联磁珠&#xff0c;是一种常见的高频噪声抑制设计手段&#xff0c;但需结合具体应用场景谨慎使用。以下是关键要点&#xff1a;---作用与目的 - 抑制高频噪声&#xff1a;磁珠对高频信号&#xff08;通常 >10 MHz&#xff09;呈现高阻抗&#xff0c;将电源线上…...

不用写代码,也能做学生画像分析?用助睿BI完成考勤高危群体可视化实战

一、前言&#xff1a;为什么要做学生考勤画像分析&#xff1f; 在校园管理场景中&#xff0c;学生考勤数据并不只是简单的“迟到、早退、请假、校服违规”记录。如果能够对这些数据进行系统化分析&#xff0c;就可以进一步发现不同学生群体的行为特征&#xff0c;例如哪些学生…...

猫抓Cat-Catch终极指南:从浏览器资源嗅探到流媒体下载的完整解决方案

猫抓Cat-Catch终极指南&#xff1a;从浏览器资源嗅探到流媒体下载的完整解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓Cat-Catch是一…...

OpCore-Simplify:10分钟搞定黑苹果配置,告别3天手动调试的智能神器

OpCore-Simplify&#xff1a;10分钟搞定黑苹果配置&#xff0c;告别3天手动调试的智能神器 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂…...

Servlet 容器与过滤器 超详细讲解

目录 一、Servlet 容器(Servlet Container) 1. 是什么? 2. 核心作用(必须掌握) 3. Servlet 生命周期(容器全权控制) 4. 工作流程(HTTP 请求完整链路) 5. 总结一句话 二、过滤器(Filter) 1. 是什么? 2. 核心特点 3. 过滤器能做什么?(高频场景) 4. 过滤…...

软件测试的“测开分离”趋势,是机遇还是陷阱

一、测开分离&#xff1a;软件测试行业的新变局在软件测试行业的发展历程中&#xff0c;角色的边界一直在悄然演变。从早期手工测试独挑大梁&#xff0c;到自动化测试兴起后测试人员开始涉足简单代码编写&#xff0c;再到如今测试开发工程师岗位的独立&#xff0c;测试与开发的…...

3步完成AI化学逆合成规划:让复杂分子合成变得简单高效的终极指南

3步完成AI化学逆合成规划&#xff1a;让复杂分子合成变得简单高效的终极指南 【免费下载链接】aizynthfinder A tool for retrosynthetic planning 项目地址: https://gitcode.com/gh_mirrors/ai/aizynthfinder 你是否曾为设计复杂分子的合成路线而烦恼&#xff1f;传统…...

dvcs-ripper快速入门:5分钟掌握Git仓库提取技巧 [特殊字符]

dvcs-ripper快速入门&#xff1a;5分钟掌握Git仓库提取技巧 &#x1f680; 【免费下载链接】dvcs-ripper Rip web accessible (distributed) version control systems: SVN/GIT/HG... 项目地址: https://gitcode.com/gh_mirrors/dv/dvcs-ripper dvcs-ripper 是一个强大的…...