您的位置:首页 > 编程语言 > C#

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

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



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     }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: