C# 桥接模式
创始人
2025-02-11 05:33:15
0

栏目总目录


概念

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与具体实现部分分离,使它们可以独立地变化。这种设计模式通过创建一个连接(桥)来将抽象和实现部分分离,从而允许它们独立地进行扩展和变化。桥接模式的主要目标是解耦抽象部分(如类或对象)和实现部分(如具体类或对象),使得它们可以分别进行扩展或修改,而不会相互影响。

角色定义

桥接模式主要包含以下四个角色:

  1. 抽象化(Abstraction)角色:定义抽象类的接口,并维护一个指向实现化对象的引用。
  2. 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  3. 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
  4. 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

好处

  1. 分离抽象接口与实现部分:使得抽象接口和实现部分可以独立变化,提高了系统的可扩展性。
  2. 符合开闭原则:对扩展开放,对修改关闭,降低了系统的维护成本。
  3. 符合合成复用原则:提高了代码的复用性,减少了代码冗余。
  4. 实现细节对客户透明:客户只需关心抽象接口,无需了解具体实现细节。

应用场景

  1. 需要在构件的抽象化角色和具体化角色之间增加更多的灵活性:通过桥接模式,可以在抽象层建立一个关联关系,避免在两个层次之间建立静态的继承联系。
  2. 不希望使用继承或因为多层次继承导致系统类的个数急剧增加:桥接模式可以取代多层继承方案,减少子类的数量。
  3. 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展:使用桥接模式可以分别对这些维度进行扩展,而不会影响其他部分。

示例代码

using System;  // 实现化角色接口 namespace BridgePatternDemo {     public interface IDrawAPI     {         void DrawCircle(int radius, int x, int y);     }      // 具体实现化角色1     public class RedCircle : IDrawAPI     {         public void DrawCircle(int radius, int x, int y)         {             Console.WriteLine($"Drawing Circle[color: red, radius: {radius}, x: {x}, y: {y}]");         }     }      // 具体实现化角色2     public class GreenCircle : IDrawAPI     {         public void DrawCircle(int radius, int x, int y)         {             Console.WriteLine($"Drawing Circle[color: green, radius: {radius}, x: {x}, y: {y}]");         }     }      // 抽象化角色     public abstract class Shape     {         protected IDrawAPI drawAPI;          protected Shape(IDrawAPI drawAPI)         {             this.drawAPI = drawAPI;         }          public abstract void Draw();     }      // 扩展抽象化角色     public class Circle : Shape     {         private int x, y, radius;          public Circle(int x, int y, int radius, IDrawAPI drawAPI) : base(drawAPI)         {             this.x = x;             this.y = y;             this.radius = radius;         }          public override void Draw()         {             drawAPI.DrawCircle(radius, x, y);         }     } }  // 客户端代码 class Program {     static void Main(string[] args)     {         // 创建具体实现化对象         IDrawAPI redCircleAPI = new RedCircle();         IDrawAPI greenCircleAPI = new GreenCircle();          // 创建扩展抽象化对象,并注入具体实现化对象         Shape redCircle = new Circle(100, 100, 10, redCircleAPI);         Shape greenCircle = new Circle(100, 100, 10, greenCircleAPI);          // 调用方法,展示结果         redCircle.Draw();         greenCircle.Draw();          Console.ReadLine();     } } 

在这个示例中,IDrawAPI 接口及其两个具体实现 RedCircleGreenCircle 构成了实现化角色的部分。Shape 抽象类和 Circle 类则构成了抽象化角色和扩展抽象化角色的部分。客户端代码(位于 Program 类中)展示了如何使用这些角色来创建和绘制不同颜色的圆形。

通过桥接模式,我们可以轻松地在不修改 Circle 类或 Shape 抽象类的情况下,添加新的颜色或绘制方法,只需实现新的 IDrawAPI 接口即可。这增加了系统的灵活性和可扩展性。

六、总结

桥接模式通过将抽象部分与实现部分分离,提高了系统的灵活性和可扩展性。在实际开发中,当遇到需要在两个独立变化的维度上进行扩展时,可以考虑使用桥接模式。希望本文能帮助你更好地理解和应用C#中的桥接模式。

相关内容

热门资讯

透视数据!aapoker透视怎... 透视数据!aapoker透视怎么用(透视)好像是有挂,2025新版(有挂插件)-哔哩哔哩1、让任何用...
第4分钟推荐!德普之星透视辅助... 第4分钟推荐!德普之星透视辅助软件是真的吗(透视)切实真的有挂,微扑克教程(有挂技术)-哔哩哔哩暗藏...
透视了解!wepoker辅助是... 透视了解!wepoker辅助是真的吗(透视)本来真的是有挂,解密教程(有挂猫腻)-哔哩哔哩1、很好的...
2分钟揭幕!hhpoker辅助... 2分钟揭幕!hhpoker辅助器(透视)总是是有挂,2025新版(真的有挂)-哔哩哔哩1、完成hhp...
透视脚本!wepoker辅助透... 透视脚本!wepoker辅助透视(透视)真是真的有挂,2025新版技巧(有挂机制)-哔哩哔哩1、起透...
第9分钟开挂!佛手在线是不是有... 第9分钟开挂!佛手在线是不是有挂(透视)本来是有挂,揭秘教程(有挂教程)-哔哩哔哩1、佛手在线是不是...
透视有挂!poker mast... 透视有挂!poker master辅助(透视)果然存在有挂,扑克教程(有挂程序)-哔哩哔哩一、pok...
七分钟关于!拱趴大菠萝万能辅助... 七分钟关于!拱趴大菠萝万能辅助器(透视)都是存在有挂,靠谱教程(详细教程)-哔哩哔哩1、用户打开应用...
透视软件!pokemmo脚本手... 透视软件!pokemmo脚本手机版(透视)本来有挂,AI教程(有挂中牌率)-哔哩哔哩pokemmo脚...
第二分钟分享!哈糖大菠萝可以开... 第二分钟分享!哈糖大菠萝可以开挂吗(透视)都是真的是有挂,技巧教程(有挂细节)-哔哩哔哩1、哈糖大菠...