在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。
代码1:抽象部分,将实现部分剥离后的部分/
public abstract class AbstractRoad { protected AbstractCar car; public AbstractCar Car { set { car = value; } } public abstract void Run(); } //高速公路 public class SpeedWay : AbstractRoad { public override void Run() { car.Run(); Console.WriteLine("高速公路上行驶"); } } //市区街道 public class Street : AbstractRoad { public override void Run() { car.Run(); Console.WriteLine("市区街道上行驶"); } } }
代码2:实现部分,剥离出来的维度
//抽象汽车 public abstract class AbstractCar { public abstract void Run(); } //小汽车; public class Car : AbstractCar { public override void Run() { Console.Write("小汽车在"); } } //公共汽车 public class Bus : AbstractCar { public override void Run() { Console.Write("公共汽车在"); } }
代码3:客户端
static void Main(string[] args) { //男人开着公共汽车在高速公路上行驶; Console.WriteLine("========================="); AbstractRoad Road3 = new SpeedWay(); Road3.Car = new Bus(); people p = new Man(); p.Road = Road3; p.Run(); Console.Read(); }