C#设计模式——桥接模式(Bridge Pattern)

一、概述
在软件开发中,我们有时候会遇上一个对象具有多个变化维度。比如对汽车对象来说,可能存在不同的汽车类型,如公共汽车、轿车等,也可能存在不同的发动机,如汽油发动机、柴油发动机等。对这类对象,可应用桥接模式来增强系统灵活度,避免由于多维度变化带来的复杂性。
二、桥接模式
桥接模式利用对象的组合关系将不同的变化维度分离,使其可以沿着各自的维度来变化。其结构图如下:

C#设计模式——桥接模式(Bridge Pattern)

Abstraction定义了抽象类,并包含Implementor对象。
RefinedAbstraction实现了抽象类。
Implementor定义了另一个变化维度。
ConcreteImplementor提供了第二个变化维度接口的具体实现。
三、示例
我们利用桥接模式来实现前述的汽车对象
首先定义Abstraction。

 1     public abstract class Car

 2     {

 3         public IEngine _engine;

 4 

 5         public Car(IEngine engine)

 6         {

 7             _engine = engine;

 8         }

 9 

10         public virtual void Start()

11         {

12             _engine.Start();

13         }

14 

15         public virtual void Stop()

16         {

17             _engine.Stop();

18         }

19     }

接着实现不同的汽车类型。

 1     public class Bus : Car

 2     {

 3         public Bus(IEngine engine)

 4             : base(engine)

 5         {

 6         }

 7 

 8         public override void Start()

 9         {

10             base.Start();

11             Console.WriteLine("Bus Start");

12         }

13 

14         public override void Stop()

15         {

16             base.Stop();

17             Console.WriteLine("Bus Stop");

18         }

19     }

20 

21     public class Limousine : Car

22     {

23         public Limousine(IEngine engine)

24             : base(engine)

25         {

26         }

27 

28         public override void Start()

29         {

30             base.Start();

31             Console.WriteLine("Limousine Start");

32         }

33 

34         public override void Stop()

35         {

36             base.Stop();

37             Console.WriteLine("Limousine Stop");

38         }

39     }

再定义第二个变化维度,即发动机的接口。

1     public interface IEngine

2     {

3         void Start();

4         void Stop();

5     }

最后实现不同的发动机。

 1     public class GasEngine : IEngine

 2     {

 3         public void Start()

 4         {

 5             Console.WriteLine("Gas Engine Start");

 6         }

 7 

 8         public void Stop()

 9         {

10             Console.WriteLine("Gas Engine Stop");

11         }

12     }

13 

14     public class DieselEngine : IEngine

15     {

16         public void Start()

17         {

18             Console.WriteLine("Diesel Engine Start");

19         }

20 

21         public void Stop()

22         {

23             Console.WriteLine("Diesel Engine Stop");

24         }

25     }

 

你可能感兴趣的:(Pattern)