应用场景: 解决的是在需求中,面临两个需求维度的变化的话,可以使用Bridge模式。 实现代码: //------------------------------------------------------- // Tank 2.0 // 两个方向的变化,一中是平台,另外一中是类型的变化。 // 将事物中多个维度的变化分离,使得其能够独立的变化。 // 一个类只能有一个变化原因。 //--------------------------------------------------------------- public abstract class Tank { protected TankPlatformImplementation tankImpl; public Tank(TankPlatformImplementation tankImpl) { this.tankImpl = tankImpl; } public TankPlatformImplementation TankImpl { get { return this.tankImpl; } set { this.tankImpl = value; } } public abstract void Shot(); public abstract void Run(); public abstract void Stop(); } //封装变化点 public abstract class TankPlatformImplementation { public abstract void MoveTankTo(int form, int to); public abstract void DrawTank(); public abstract void DoShot(); public abstract void DoStop(); } public class T50 : Tank { public T50(TankPlatformImplementation tankImpl) : base(tankImpl) { } #region ITank Members public override void Shot() { tankImpl.DoShot(); } public override void Run() { tankImpl.MoveTankTo(1, 2); } public override void Stop() { tankImpl.DoStop(); } #endregion } public class T75 : Tank { public T75(TankPlatformImplementation tankImpl) : base(tankImpl) { } } public class T90 : Tank { public T90(TankPlatformImplementation tankImpl) : base(tankImpl) { } } public class PCTankImplementation : TankPlatformImplementation { public override void MoveTankTo(int form, int to) { } public override void DrawTank() { } public override void DoShot() { } public override void DoStop() { } } public class MobileTankImplementation : TankPlatformImplementation { public override void MoveTankTo(int form, int to) { throw new NotImplementedException(); } public override void DrawTank() { throw new NotImplementedException(); } public override void DoShot() { throw new NotImplementedException(); } public override void DoStop() { throw new NotImplementedException(); } } class App { public static void main(String[] args) { // 这里可以使用另外的模式来关联这个,例如singleton模式等。 TankPlatformImplementation tankImpl = new MobileTankImplementation(); T50 tank = new T50(tankImpl); } }