桥接模式(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
相关推荐
ACP广源盛1392462567320 小时前
(ACP广源盛)GSV2231---DisplayPort 1.4 MST 到 HDMI 2.0/DP/Type-C 转换器(带嵌入式 MCU)quant_198620 小时前
【教程】使用加密货币行情接口 - 查询比特币实时价格咕白m62520 小时前
如何通过 C# 提取 PDF 图片?单页与全文档提取熊猫_豆豆20 小时前
Python 写一个标准版和程序员版计算器Mr.Jessy20 小时前
Web APIs 学习第四天:DOM事件进阶studyForMokey20 小时前
【Kotlin内联函数】小虚竹20 小时前
Rust日志系统完全指南:从log门面库到env_logger实战星释20 小时前
Rust 练习册 8:链表实现与所有权管理今日说"法"20 小时前
Rust 日志级别与结构化日志:从调试到生产的日志策略-大头.20 小时前
Rust并发编程实战技巧