,抽象类与具体的实现类在结构上是相互独立的,两者的相互变化并不会影响到彼此,只要“桥梁”没变,两者的变化并不会影响到彼此。桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
参照菜鸟教程的桥接模式,具体实现如下图所示
#region 圆设置类 class CircleSet { public CircleSet(int _radius) { radius = _radius; } public int radius { get; set; } } #endregion
#region 绘制接口 interface DrawAPI { void DrawCircle(CircleSet circleset); } #endregion
#region 具体绘制类 class RedCircle : DrawAPI { public void DrawCircle(CircleSet circleset) { Console.WriteLine("draw circle radius:{0} ; color:red", circleset.radius); } } class GreenCircle : DrawAPI { public void DrawCircle(CircleSet circleset) { Console.WriteLine("draw circle radius:{0} ; color:green", circleset.radius); } } #endregion
#region 具体实现类 class Circle : Shape { private CircleSet _circleset; public Circle(DrawAPI drawapi, CircleSet circleset) : base(drawapi) { _circleset = circleset; } public override void Draw() { _drawapi.DrawCircle(_circleset); } } #endregion
static void Main(string[] args) { DrawAPI da_red = new RedCircle(); Shape shape = new Circle(da_red,new CircleSet(10)); shape.Draw(); Console.ReadKey(); }
桥接模式实现是:具体实现类继承自桥接而不直接继承实现类的抽象类,抽象类与具体的实现类在结构上是相互独立的,两者的相互变化并不会影响到彼此,只要“桥梁”没变,两者的变化并不会影响到彼此。
就以上教程的实例程序来说,具体的实现是RedCircle、GreenCircle,它们的抽象类为Shape,按一般逻辑来说,我们是直接继承Shape来创建不同的具体对象,但桥接模式中是通过“桥梁”DrawAPI建立抽象与具体实现之间的联系,调用DrawAPI中的方法来具体实现。
巧妙的点就在于实现类通过桥接调用具体,那些继承接口的实现类的调用借助桥接来实现,从而解除耦合
来源:https://www.cnblogs.com/ningxinjie/p/12216451.html