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

java的设计模式之桥接模式(Bridge)

之前遇到过一个采用发送邮件和发送短信的方式低级中级高级三种告警通知,当时做的很潦草,现在发现了大佬的文章桥接模式,我感觉很好,非常适用那个场景,于是想发出来,各位都看看

桥接模式包含以下四个关键角色:

抽象化: 定义抽象类的接口,并维护一个指向实现化对象的引用。

扩展抽象化: 抽象化的子类,可以扩展或修改父类的接口。

实现化: 定义实现类的接口。这个接口不一定要与抽象化的接口完全一致,通常更基础。

具体实现化: 实现化接口的具体类。

//通知 抽象类
abstract class Notification {protected MessageSender sender;public Notification(MessageSender sender) {this.sender = sender;}public abstract void notify(String message);
}
package com.sailing.hsm.bridge;/***  扩展的抽象 低级告警* @author guanc* @ClassName LowLevelNotification* @date 2025年11月07日* @version: 1.0*/
public class LowLevelNotification extends Notification{public LowLevelNotification(MessageSender sender) {super(sender);}@Overridepublic void notify(String message) {sender.send( message);}
}
package com.sailing.hsm.bridge;/***  扩展的抽象 中级告警* @author guanc* @ClassName LowLevelNotification* @date 2025年11月07日* @version: 1.0*/
public class IntermediateNotification extends Notification{public IntermediateNotification(MessageSender sender) {super(sender);}@Overridepublic void notify(String message) {//重试逻辑 尝试发送3次int retries = 3;while (retries > 0){try {sender.send( message);break;} catch (Exception e) {retries--;}}}
}
package com.sailing.hsm.bridge;/***  扩展的抽象 高级* @author guanc* @ClassName LowLevelNotification* @date 2025年11月07日* @version: 1.0*/
public class AdvancedNotification extends Notification{private long delayInSecond;public AdvancedNotification(MessageSender sender,long delayInSecond) {super(sender);this.delayInSecond = delayInSecond;}@Overridepublic void notify(String message) {new Thread(() -> {try {Thread.sleep(delayInSecond * 1000);sender.send( message);} catch (InterruptedException e) {e.printStackTrace();}}).start();System.out.println("延迟了" + delayInSecond + "秒后发送");}
}
package com.sailing.hsm.bridge;/*** 实现的接口 消息发送器* @author guanc* @ClassName MessageSender* @date 2025年11月07日* @version: 1.0*/
interface MessageSender {void send(String message);
}
package com.sailing.hsm.bridge;/*** 短信发送器* @author guanc* @ClassName EmailSender* @date 2025年11月07日* @version: 1.0*/
public class SmsSender implements MessageSender{@Overridepublic void send(String message) {System.out.println("短信发送:" + message);}
}
package com.sailing.hsm.bridge;/*** 短信发送器* @author guanc* @ClassName EmailSender* @date 2025年11月07日* @version: 1.0*/
public class EmailSender implements MessageSender{@Overridepublic void send(String message) {System.out.println("发送邮件:" + message);}
}
package com.sailing.hsm.bridge;/**** @author guanc* @ClassName TestDemo* @date 2025年11月07日* @version: 1.0*/
public class TestDemo {public static void main(String[] args) {MessageSender emailSender = new EmailSender();MessageSender smsSender = new SmsSender();//中级告警+短信Notification intermediateNotification = new IntermediateNotification(smsSender);intermediateNotification .notify("内存占用百分之90了,少年还不来看看!!!");//低级告警+邮件Notification lowLevelNotification = new LowLevelNotification(emailSender);LowLevelNotification.notify(" 内存占用百分之80,少年来看看吧!");//高级告警+短信Notification advancedNotification = new AdvancedNotification(smsSender,6);advancedNotification .notify("服务器爆炸了,赶紧修复啊!!!" );}
}

它的适用场景

  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。

  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。

  • 不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。

  • 需要对抽象部分和实现部分进行动态绑定时。

咋一看桥接模式与适配器模式有点类似,但是你仔细看会发现很大不同:

桥接模式: 在设计之初就使用,目的是将抽象和实现分离,以便它们可以独立变化。它是一种前瞻性的设计。

适配器模式: 通常在设计之后使用,目的是让两个原本不兼容的接口能够协同工作。它是一种补救性的设计。

http://www.dtcms.com/a/581447.html

相关文章:

  • 【Unity踩坑】Error MSB3774: 找不到 SDK“WindowsMobile, Version=10.0.26100.0
  • 网站二维码可以做长按识别吗深圳专业网站建设制作价格低
  • 图片优化 上传图片压缩 npm包支持vue(react)框架开源插件 支持在线与本地
  • React Native CLI的搭建
  • 世界互联网大会乌镇峰会:共话数字未来新可能
  • TeamCity更新包
  • 第8届 AiDD峰会 深圳 | “AI+领域”线:解锁未来科技新图景
  • 网站搭建服务器需要多少钱网站运营seo招聘
  • 结构自由度
  • Effective Python 第49条:用__init_subclass__记录现有的子类
  • 《PLC编程与MES系统开发学习指南》详细大纲
  • AbMole小课堂丨L-NAME:一氧化氮合酶(NOS)经典抑制剂在心血管及免疫研究中的应用
  • 【AI入门】通俗易懂讲AI(初稿)
  • 静力水准仪监测核心原理:如何实现高精度沉降监测?
  • 谷歌网站为何打不开网站栏目定位
  • 基于西门子1500仿真软件PLCSIM Advanced 7.0的本机Modbus TCP通信实例之Modbus TCP Sever建立(一)
  • 虫虫wap建站源码the7企业中 英文wordpress模板
  • PHP 表单验证
  • 6-6〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸利用Windows库文件进行攻击-2
  • SSM文创产品推荐系统设计与实现95ml5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • WebSocket 核心 API 速查表
  • 多功能电脑PDF转换工具Icecream PDFv3.15 中文绿色便携版
  • 在线ftp传网站文件有空间域名服务器怎么做网站
  • 独立站的优势和劣势和运营技巧
  • 软考 系统架构设计师系列知识点之杂项集萃(192)
  • 在Vagrant 2.4.9中安装Rocky 9和Docker
  • 儿童网站设计百度怎么做自己网站
  • Mysql作业4
  • ComfyUI(8)--- 老照片修复(1)
  • 企业网站的首页网站备案 公司注销吗