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

时间:2021-07-22 22:47:04

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

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

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

C#设计模式——桥接模式(Bridge Pattern)
 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 }
C#设计模式——桥接模式(Bridge Pattern)

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

C#设计模式——桥接模式(Bridge Pattern)
 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 }
C#设计模式——桥接模式(Bridge Pattern)

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

1     public interface IEngine
2 {
3 void Start();
4 void Stop();
5 }

最后实现不同的发动机。

C#设计模式——桥接模式(Bridge Pattern)
 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)
 
 

C#设计模式——桥接模式(Bridge Pattern)的更多相关文章

  1. 转:设计模式-----桥接模式(Bridge Pattern)

    转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...

  2. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  3. 【设计模式】桥接模式 Bridge Pattern

    开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号, ...

  4. python 设计模式之桥接模式 Bridge Pattern

    #写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...

  5. 二十四种设计模式:桥接模式&lpar;Bridge Pattern&rpar;

    桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象 ...

  6. 桥接模式&lpar;Bridge Pattern&rpar;

    1,定义           桥接模式(Bridge Pattern),也称为桥梁模式,其用意是将抽象化与实现化脱耦,使得两者可以独立的变化,它可以使软件系统沿着多个方向进行变化,而又不引入额外的复杂 ...

  7. Net设计模式实例之桥接模式&lpar; Bridge Pattern&rpar;

    一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...

  8. 七个结构模式之桥接模式&lpar;Bridge Pattern&rpar;

    问题: 当存在多个独立的变化维度时,如果仍采用多层继承结构,会急剧的增加类的个数,因此可以考虑将各个维度分类,使他们不相互影响. 定义: 将抽象部分与它的实现部分进行分离,抽象部分只保留最为本质的部分 ...

  9. 设计模式 -- 桥接模式&lpar;Bridge&rpar;

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...

随机推荐

  1. struts2&colon; 通过流输出实现exce导出

    参考下面代码,在Action中加一个方法: // 导出excel public String excel() throws Exception { StringBuffer excelBuf = ne ...

  2. 2&period;css字体单位

    这期简单说说css字体单位 字体单位有三种:px.em.rem 任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px. % 百分比 in 英寸 cm 厘米 mm 毫米 e ...

  3. codeforces463D

    Gargari and Permutations CodeForces - 463D Gargari got bored to play with the bishops and now, after ...

  4. nginx的with-http&lowbar;sub&lowbar;module模块使用之替换字符串

    一.介绍 该ngx_http_sub_module模块是一个过滤器,通过将一个指定的字符串替换为另一个字符串来修改响应.该模块不是默认生成的,它应该使用--with-http_sub_module 配 ...

  5. VGA图像显示组成模块分析

    VGA图像显示组成模块分析 1.片上内存(FPGA RAM)充当存储器 2.静态内存(SRAM)充当存储器 3.将静态内存换为动态内存 动态内存容量大,但是即时能力不好,它无法立即响应VGA功能模块, ...

  6. vscode-nextgenas编译配置

    文档:https://github.com/BowlerHatLLC/vscode-nextgenas/wiki/asconfig.json asconfig.json { "config& ...

  7. HDU3695&lpar;AC自动机模板题&rpar;

    题意:给你n个字符串,再给你一个大的字符串A,问你着n个字符串在正的A和反的A里出现多少个? 其实就是AC自动机模板题啊( ╯□╰ ) 正着query一次再反着query一次就好了 /* gyt Li ...

  8. shareSDK&period;js web版的使用

    自定义将要分享的内容 <!--MOB SHARE BEGIN--> <div class="-mob-share-open">分享</div> ...

  9. Tomcat的JVM和连接数设置

    Tomcat的JVM和连接数设置 Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m - ...

  10. SQL 报表 --简易进销系统

    模型图: -- ============================================ -- Author: lifu -- Create Date: 2017-06-18 -- D ...