桥接模式(Bridge Pattern)
概念:
· 将抽象部分与实现部分分离,使它们可以独立地变化;
· 用"桥"连接抽象和实现部分;
UML结构:
Abstraction--------------------Implementor | | ------------------- ------------------- | | | | RefinedAbstraction ... ConcreteImplementorA ConcreteImplementorB代码示例:
cs/// <summary> /// 形状抽象类 /// </summary> public abstract class Shape { public string ShapeName { get; private set; } public Renderer Renderer { get; set; } public Shape(string shapeName, Renderer renderer) { this.ShapeName = shapeName; this.Renderer = renderer; } // 创建一个形状 public virtual void Draw() { Renderer.Render(this); } } /// <summary> /// 圆形(形状抽象类的具体实现) /// </summary> public class Circle : Shape { public Circle(string shapeName, Renderer renderer) : base(shapeName, renderer) { } } /// <summary> /// 矩形(形状抽象类的具体实现) /// </summary> public class Rectangle : Shape { public Rectangle(string shapeName, Renderer renderer) : base(shapeName, renderer) { } } /// <summary> /// 渲染平台抽象类 /// </summary> public abstract class Renderer { // 渲染一个图形 public abstract void Render(Shape shape); } /// <summary> /// OpenGL渲染类(渲染抽象类的具体的实现) /// </summary> public class OpenGL : Renderer { // 渲染一个图形? public override void Render(Shape shape) { Console.WriteLine($"使用OpenGL渲染引擎渲染图形:{shape.ShapeName}"); } } /// <summary> /// DirectX渲染类(渲染抽象类的具体的实现) /// </summary> public class DirectX : Renderer { // 渲染一个图形 public override void Render(Shape shape) { Console.WriteLine($"使用DirectX渲染引擎渲染图形:{shape.ShapeName}"); } } /// <summary> /// 客户端 /// </summary> public class Client { public static void Main() { Renderer openGL = new OpenGL(); Renderer directX = new DirectX(); Shape circle = new Circle("Circle", openGL); Shape rectangle = new Rectangle("Rectangle", directX); circle.Draw(); rectangle.Draw(); circle.Renderer = directX; rectangle.Renderer = openGL; circle.Draw(); rectangle.Draw(); } }特点:
优点:· 抽象与实现分离 :修改实现不会影响抽象,反之亦然;
· 提高可扩展性 :可以在不改变抽象的情况下增加新的实现;
· 避免类爆炸 :不必为每种组合都创建子类;
缺点:· 增加系统复杂性 :类的层次变多,结构相对复杂;
· 理解成本高 :需要理解桥接与组合关系,组合 (Composition)是桥接模式的实现手段;
适用场景:
· 抽象和实现可能独立扩展;
· 不希望在抽象类中固定具体实现;
· 系统中有多维度变化,需要避免类爆炸;
举例场景:
· 图形绘制系统
· 抽象:图形(Shape)
· 扩展抽象:圆形、矩形
· 实现接口:绘图 API(OpenGL、DirectX)
· 具体实现:不同绘图 API 绘制方式
· 跨平台窗口系统
· 抽象:窗口(Window);
· 扩展抽象:对话框窗口、警告窗口;
· 实现接口:操作系统接口(Windows API、Linux API);
· 具体实现:不同操作系统的窗口绘制方法;
【设计模式】桥接模式
大飞pkz2025-09-27 13:10
相关推荐
We་ct3 分钟前
LeetCode 50. Pow(x, n):从暴力法到快速幂的优化之路阿里嘎多学长6 分钟前
2026-04-12 GitHub 热点项目精选EnCi Zheng7 分钟前
P2G-Python字符串方法完全指南-split、join、strip、replace的Python编程利器爱学习的小囧9 分钟前
VCF 9 实验室网络部署全攻略:从硬件连接到配置实操liliangcsdn20 分钟前
LLM如何与mcp server交互示例军军君0126 分钟前
Three.js基础功能学习十五:智能黑板实现实例二维齐洛波奇特利(male)29 分钟前
@Pointcut(“execution(* com.hdzx..*(..))“)切入点与aop 导致无限循环来日可期131439 分钟前
C/C++ 反常识记录(1)—— 那些容易踩坑的语法细节实心儿儿1 小时前
C++ —— C++11(2)立莹Sir1 小时前
云原生全解析:从概念到实践,Java技术栈如何拥抱云原生时代