哪个网站可以做推手,网站建设的经济可行性,网站被黑,团员登录系统智慧团建栏目总目录 概念
桥接模式#xff08;Bridge Pattern#xff09;是一种结构型设计模式#xff0c;用于将抽象部分与具体实现部分分离#xff0c;使它们可以独立地变化。这种设计模式通过创建一个连接#xff08;桥#xff09;来将抽象和实现部分分离#xff0c;从而允许…栏目总目录 概念
桥接模式Bridge Pattern是一种结构型设计模式用于将抽象部分与具体实现部分分离使它们可以独立地变化。这种设计模式通过创建一个连接桥来将抽象和实现部分分离从而允许它们独立地进行扩展和变化。桥接模式的主要目标是解耦抽象部分如类或对象和实现部分如具体类或对象使得它们可以分别进行扩展或修改而不会相互影响。
角色定义
桥接模式主要包含以下四个角色
抽象化Abstraction角色定义抽象类的接口并维护一个指向实现化对象的引用。扩展抽象化Refined Abstraction角色是抽象化角色的子类实现父类中的业务方法并通过组合关系调用实现化角色中的业务方法。实现化Implementor角色定义实现化角色的接口供扩展抽象化角色调用。具体实现化Concrete Implementor角色给出实现化角色接口的具体实现。
好处
分离抽象接口与实现部分使得抽象接口和实现部分可以独立变化提高了系统的可扩展性。符合开闭原则对扩展开放对修改关闭降低了系统的维护成本。符合合成复用原则提高了代码的复用性减少了代码冗余。实现细节对客户透明客户只需关心抽象接口无需了解具体实现细节。
应用场景
需要在构件的抽象化角色和具体化角色之间增加更多的灵活性通过桥接模式可以在抽象层建立一个关联关系避免在两个层次之间建立静态的继承联系。不希望使用继承或因为多层次继承导致系统类的个数急剧增加桥接模式可以取代多层继承方案减少子类的数量。一个类存在两个独立变化的维度且这两个维度都需要进行扩展使用桥接模式可以分别对这些维度进行扩展而不会影响其他部分。
示例代码
using System;// 实现化角色接口
namespace BridgePatternDemo
{public interface IDrawAPI{void DrawCircle(int radius, int x, int y);}// 具体实现化角色1public class RedCircle : IDrawAPI{public void DrawCircle(int radius, int x, int y){Console.WriteLine($Drawing Circle[color: red, radius: {radius}, x: {x}, y: {y}]);}}// 具体实现化角色2public 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 接口及其两个具体实现 RedCircle 和 GreenCircle 构成了实现化角色的部分。Shape 抽象类和 Circle 类则构成了抽象化角色和扩展抽象化角色的部分。客户端代码位于 Program 类中展示了如何使用这些角色来创建和绘制不同颜色的圆形。
通过桥接模式我们可以轻松地在不修改 Circle 类或 Shape 抽象类的情况下添加新的颜色或绘制方法只需实现新的 IDrawAPI 接口即可。这增加了系统的灵活性和可扩展性。
六、总结
桥接模式通过将抽象部分与实现部分分离提高了系统的灵活性和可扩展性。在实际开发中当遇到需要在两个独立变化的维度上进行扩展时可以考虑使用桥接模式。希望本文能帮助你更好地理解和应用C#中的桥接模式。