“Bridge”模式定义:结构性设计模式,将抽象部分和现实部分分离,两者都可以独立的变化。换一种理解可以为,将一个事物的多个维度变化进行分离。
“Bridge”模式动机:将抽象部分与它的实现部分分离,指实现系统可能有多个角度分类,每一种分类都可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
“Bridge”模式要点:
1.)Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。
2.)所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,便可以任意组合它们。
3.)Bridge模式有时候类似于多继承方案,但多继承方案往往违背单一职责原则,复用性比较差。Bridge模式是比多继承方案更好的解决办法。(组合优先于继承)
4.)Bridge模式的应用一般在“两个非常强的变化维度”,有时候即使有两个变化的维度,但是某个方向的变化维度并不激烈则并不一定使用Bridge模式。
下面直接看一下Bridge模式的代码案例:实现在不同的设备运行“坦克大战”
//抽象类Tank,TankPlatformImplementation进行组合
public abstract class Tank
{
protected TankPlatformImplementation tankImpl;
public TankPlatformImplementation TankImpl
{
get
{
return tankImpl;
}
set
{
this.tankImpl = value;
}
}
public Tank(TankPlatformImplementation tankImpl)
{
this.tankImpl = tankImpl;
}
public abstract void Short();
public abstract void Run();
public abstract void Turn();
}
public abstract class TankPlatformImplementation
{
public abstract void Draw();
public abstract void Move();
}
//两种维度下的细节实现
public class PcTankPlatformImplementation : TankPlatformImplementation
{
public override void Draw()
{
throw new NotImplementedException();
}
public override void Move()
{
throw new NotImplementedException();
}
}
public class T50 : Tank
{
public T50(TankPlatformImplementation tankImpl) : base(tankImpl)
{
}
public override void Run()
{
throw new NotImplementedException();
}
public override void Short()
{
throw new NotImplementedException();
}
public override void Turn()
{
throw new NotImplementedException();
}
}
//客户程序的具体调用
public class App
{
public void Main(string[] args)
{
TankPlatformImplementation tankImpl = new PcTankPlatformImplementation();
T50 tankT50 = new T50(tankImpl);
tankT50.Run();
}
}