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 }

C#设计模式——桥接模式(Bridge Pattern)的更多相关文章
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- 【设计模式】桥接模式 Bridge Pattern
开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号, ...
- python 设计模式之桥接模式 Bridge Pattern
#写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...
- 二十四种设计模式:桥接模式(Bridge Pattern)
桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象 ...
- 桥接模式(Bridge Pattern)
1,定义 桥接模式(Bridge Pattern),也称为桥梁模式,其用意是将抽象化与实现化脱耦,使得两者可以独立的变化,它可以使软件系统沿着多个方向进行变化,而又不引入额外的复杂 ...
- Net设计模式实例之桥接模式( Bridge Pattern)
一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...
- 七个结构模式之桥接模式(Bridge Pattern)
问题: 当存在多个独立的变化维度时,如果仍采用多层继承结构,会急剧的增加类的个数,因此可以考虑将各个维度分类,使他们不相互影响. 定义: 将抽象部分与它的实现部分进行分离,抽象部分只保留最为本质的部分 ...
- 设计模式 -- 桥接模式(Bridge)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...
随机推荐
- spring整合activemq发送MQ消息[Topic模式]实例
Topic模式消息发送实例 1.pom引入 <dependency> <groupId>junit</groupId> <artifactId>juni ...
- Navi.Soft30.开放平台.聚合.开发手册
1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...
- [Javascript] Decorators in JavaScript
First, what is 'High Order function', basic just a function, inside the function return another fuct ...
- iOS杂谈-图片拉伸的实现
如上图是一个按钮的背景图,在Android上,很多图片资源都是类似这样子的,但是由于按钮的高度及宽度与图片的世纪尺寸不同,所以需要采用9patch来实现拉伸处理, 可参考:http://www.cnb ...
- 算法 - 求两个自然数的最小公倍数(C++)
//************************************************************************************************** ...
- Exists 比Contains 慢非常多。
void Main() { List<string> s = new List<string>(){}; for(int i=0;i<10000;i++) { s.Add ...
- WinForm 批量设置指定控件中的控件状态
在开发中常遇到当点击某个按钮的时候,禁用文本框或按钮的的状态,以防止误操作,下面的代码是我已批量设置指定控件中的按钮状态的代码,同理可以延伸出很多操作. /// <summary> /// ...
- Java IO 之 OutputStream源码
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- dissmiss a UISearchBar with an SearchBarController
If you want do dissmiss a UISearchBar with an SearchBarController, just use this Code: [self.searchD ...
- HDU 3999 The order of a Tree
The order of a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...