Abstraction 1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace BridgeStudy 6{ 7 /**//// <summary> 8 /// 坦克基类 9 /// </summary>10 public abstract class TankBase11 { 12 TankBase1 tank = null;13 public TankBase1 Tank14 { 15 get16 { 17 return tank;18 }19 set20 { 21 tank = value;22 }23 }2425 public TankBase1 TankBase126 { 27 get28 { 29 throw new System.NotImplementedException();30 }31 set32 { 33 }34 }35 36 public virtual void Shoot()37 { 38 tank.Shoot();39 }40 }41}42
Implentor 1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace BridgeStudy 6{ 7 /**//// <summary> 8 /// 射击炮弹种类不同的坦克基类 9 /// </summary>10 public abstract class TankBase111 { 12 13 public abstract void Shoot();14 }15}16
RefinedAbstractuib 1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace BridgeStudy 6{ 7 /**//// <summary> 8 /// 纵向射击坦克的实现类 9 /// </summary>10 public class VerticalTank:TankBase11 { 12 public override void Shoot()13 { 14 base.Shoot();15 Console.WriteLine("shoot vertical ");16 }17 }18}1920using System;21using System.Collections.Generic;22using System.Text;2324namespace BridgeStudy25{ 26 /**//// <summary>27 /// 横向设计坦克的实现类28 /// </summary>29 public class HorizontalTank : TankBase30 { 31 public override void Shoot()32 { 33 base.Shoot();34 Console.WriteLine("shoot horizontal ");35 }36 }37}38
ConcreteImplementor 1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace BridgeStudy 6{ 7 /**//// <summary> 8 /// 普通炮弹坦克实现类 9 /// </summary>10 public class CommonTank : TankBase111 { 12 public override void Shoot()13 { 14 Console.WriteLine("shoot common cannonball");15 }16 }17}181920using System;21using System.Collections.Generic;22using System.Text;2324namespace BridgeStudy25{ 26 /**//// <summary>27 /// 激光坦克实现类28 /// </summary>29 public class LaserTank:TankBase130 { 31 public override void Shoot()32 { 33 Console.WriteLine("shoot common Laser");34 }35 }36}37
类关系图为 运行结果: 源代码: 总结: 1。Bri dge 模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。 2.所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,便可以任意它们,从而获得不同平台上的不同型号。
3.Bridge模式有时候类似于多继承方案,但是多继承方案往往违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。
4.Bridge模式的应用一般在“两个非常强的变化维度”,有时候即使有两个变化的维度,但是某个方向的变化维度并不剧烈——换言之两个变化不会导致纵横交错的结果,并不一定要使用Bridge模式。
适用性
在以下的情况下应当使用桥梁模式:
1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3.一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。
4.虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
Bridge模式是一个非常有用的模式,也非常复杂,它很好的符合了开放-封闭原则和优先使用对象,而不是继承这两个面向对象原则。
关于桥接模式更好,更详细的介绍请访问