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

23种设计模式-结构型模式之桥接模式(Java版本)

Java 桥接模式(Bridge Pattern)详解

🌉 什么是桥接模式?

桥接模式用于将抽象部分与实现部分分离,使它们可以独立变化。
通过在两个独立变化的维度之间建立“桥”,避免因多维度扩展导致的类爆炸。


🧠 使用场景

  • 系统需要在多个维度进行扩展
  • 想解耦抽象和实现,让它们各自独立发展
  • 减少子类的数量,避免类爆炸

🏗️ 模式结构

  • Abstraction(抽象类):定义高层接口,持有 Implementor 引用
  • RefinedAbstraction(扩充抽象类):扩展抽象定义
  • Implementor(实现接口):定义底层实现接口
  • ConcreteImplementor(具体实现):提供具体实现

✅ 示例:不同品牌的电视远程控制

实现接口(Implementor)

public interface TV {void on();void off();void tuneChannel(int channel);
}

具体实现(ConcreteImplementor)

public class SonyTV implements TV {public void on() { System.out.println("Sony TV is ON"); }public void off() { System.out.println("Sony TV is OFF"); }public void tuneChannel(int channel) { System.out.println("Sony TV tuned to channel " + channel); }
}public class SamsungTV implements TV {public void on() { System.out.println("Samsung TV is ON"); }public void off() { System.out.println("Samsung TV is OFF"); }public void tuneChannel(int channel) { System.out.println("Samsung TV tuned to channel " + channel); }
}

抽象类(Abstraction)

public abstract class RemoteControl {protected TV implementor;public RemoteControl(TV implementor) { this.implementor = implementor; }public abstract void on();public abstract void off();
}

扩充抽象类(RefinedAbstraction)

public class AdvancedRemoteControl extends RemoteControl {public AdvancedRemoteControl(TV implementor) {super(implementor);}@Overridepublic void on() {implementor.on();}@Overridepublic void off() {implementor.off();}public void setChannel(int channel) {implementor.tuneChannel(channel);}
}

客户端调用

public class Client {public static void main(String[] args) {TV sony = new SonyTV();RemoteControl remote = new AdvancedRemoteControl(sony);remote.on();((AdvancedRemoteControl) remote).setChannel(5);remote.off();TV samsung = new SamsungTV();remote = new AdvancedRemoteControl(samsung);remote.on();((AdvancedRemoteControl) remote).setChannel(10);remote.off();}
}

🧩 优点

  • 分离抽象与实现,减少耦合
  • 提高可扩展性,各自独立改变
  • 减少子类数量

⚠️ 缺点

  • 增加系统复杂度,结构较多
  • 初期设计需仔细分析抽象层次

✅ 使用建议

当系统在多个维度上扩展时,且希望解耦抽象和实现,避免类爆炸,使用桥接模式是理想选择。

http://www.xdnf.cn/news/1096.html

相关文章:

  • 单个或批量实现-提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件。
  • SpringClound 微服务分布式Nacos学习笔记
  • 最新整理AI开源大模型介绍
  • vue3:十一、主页面布局(修改左侧导航条的样式)
  • C++继承(最详细)
  • SAP获利分析KEA0-值字段无法被分配,原因既然是。。
  • Linux常用命令
  • [创业之路-381]:企业法务 - 企业经营者,有哪些生产安全风险,哪些人承担责任?承担哪些责任?如何防范?
  • Java从入门到“放弃”(精通)之旅——抽象类和接口⑨
  • conda和pip的区别
  • C# 实现TCP/IP通信协议——Message结构设计
  • C# AppContext.BaseDirectory 应用程序的启动目录
  • Smart AI:在AI浪潮中崛起的智能NFT生态革命者
  • 【高并发内存池】从零到一的项目之高并发内存池整体框架设计及thread cache设计
  • 晶振详解:原理、作用、种类、应用与选型要点
  • Scribe: 一个非常方便的操作文档编写工具
  • 爬虫(requests库,logging库)
  • Linux ssh免密登陆设置
  • 【ECharts】ECharts曲线图节点点击事件实现
  • React18+ 项目搭建-从初始化、技术选型到开发部署的全流程规划
  • ProxySQL 性能调优实战案例
  • npm的基本使用安装所有包,安装删除指定版本的包,配置命名别名
  • 遨游通讯发布国产化旗舰三防手机AORO AU1:以自主可控重塑工业安全
  • 基于 Vue 的Tiptap 富文本编辑器使用指南
  • 【MCP Node.js SDK 全栈进阶指南】中级篇(4):MCP错误处理与日志系统
  • 【MCP Node.js SDK 全栈进阶指南】初级篇(3):MCP资源开发基础
  • TextCNN 模型文本分类实战:深度学习在自然语言处理中的应用
  • 宏碁笔记本电脑怎样开启/关闭触摸板
  • 高并发抢券系统设计与落地实现详解
  • 【git】subtree拆分大的git库到多个独立git库