桥接模式(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