桥接模式(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
相关推荐
kylezhao20193 小时前
C#变量 + 工业常用数据类型:重点 byte/int/floatyyy(十一月限定版)3 小时前
c语言——二叉树_膨胀的大雄_3 小时前
01-创建型模式froginwe113 小时前
Web 品质国际化亮子AI3 小时前
【Svelte】怎样实现一个图片上传功能?shehuiyuelaiyuehao3 小时前
7类和对象落羽的落羽3 小时前
【C++】深入浅出“图”——图的基本概念与存储结构bugcome_com3 小时前
C# 中 Overload(重载)与 Override(重写)的核心区别与实战解析巴塞罗那的风3 小时前
从蓝图到执行:智能体中的“战略家思维JAVA+C语言3 小时前
Python新手学习