桥接模式(Bridge Pattern)

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/401 访问。

桥接模式属于结构型模式,它将抽象部分与它的实现部分分离,使它们都可以相互独立地变化。

利用面向对象的技术来使得某类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度,这就是桥接模式的核心意义。

角色:

1、抽象(Abstraction)

定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口;

2、扩充抽象(Refined Abstraction)

继承自Abstraction的子类,依旧是一个抽象的事物名;

3、实现(Implementor)

定义具体行为,具体特征的应用接口;

4、具体实现(ConcreteImplementor)

Implementor的具体实现。

示例:

命名空间BridgePattern中包含电视机基类,3个具体电视机类,一个遥控器基类和1个具体遥控器类。本案例尝试使用桥接模式来解决如何用遥控器来遥控不同的电视机完成相应的动作。

namespace BridgePattern
public abstract class Television {

    public abstract void TurnOn();

    public abstract void TurnOff();

    public abstract void TurnChannel();

}

电视机基Television类,包含打开电视TurnOn、关闭电视TurnOff、换台功能TurnChannel。

public class Konka : Television {

    public override void TurnOn() {
Console.WriteLine("Turn on Konka!");
} public override void TurnOff() {
Console.WriteLine("Turn off Konka!");
} public override void TurnChannel() {
Console.WriteLine("Turn channel Konka!");
} }

具体电视类,康佳Konka类。

public class Lenovo : Television {

    public override void TurnOn() {
Console.WriteLine("Turn on Lenovo!");
} public override void TurnOff() {
Console.WriteLine("Turn off Lenovo!");
} public override void TurnChannel() {
Console.WriteLine("Turn channel Lenovo!");
} }

具体电视类,联想Lenovo类。

public class Panasonic : Television {

    public override void TurnOn() {
Console.WriteLine("Turn on Panasonic!");
} public override void TurnOff() {
Console.WriteLine("Turn off Panasonic!");
} public override void TurnChannel() {
Console.WriteLine("Turn channel Panasonic!");
} }

具体电视类,松下Panasonic类。

public class TeleControllerBase {

    public Television Television { get; set; }

    public virtual void TurnOn() {
Television.TurnOn();
} public virtual void TurnOff() {
Television.TurnOff();
} public virtual void TurnChannel() {
Television.TurnChannel();
} }

遥控器基类TeleControllerBase类,内部维持一个电视机基类的引用,并包含对应的3个电视机功能。

public class TeleController : TeleControllerBase {

    public override void TurnOff() {
base.TurnOff();
Console.WriteLine("-------------------------");
} }

具体遥控器TeleController类。

public class Program {

    private static TeleControllerBase _teleController = null;

    public static void Main(string[] args) {
_teleController = new TeleController(); _teleController.Television = new Konka();
_teleController.TurnOn();
_teleController.TurnChannel();
_teleController.TurnOff(); _teleController.Television = new Lenovo();
_teleController.TurnOn();
_teleController.TurnChannel();
_teleController.TurnOff(); _teleController.Television = new Panasonic();
_teleController.TurnOn();
_teleController.TurnChannel();
_teleController.TurnOff(); Console.ReadKey();
} }

以上是调用方的代码,以下是这个案例的输出结果:

Turn on Konka!
Turn channel Konka!
Turn off Konka!
-------------------------
Turn on Lenovo!
Turn channel Lenovo!
Turn off Lenovo!
-------------------------
Turn on Panasonic!
Turn channel Panasonic!
Turn off Panasonic!
-------------------------

优点:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/401 访问。

1、抽象和实现的分离;

2、优秀的扩展能力;

3、实现细节对客户透明。

缺点:

1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

使用场景:

1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系;

2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用;

3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

C#设计模式之7-桥接模式的更多相关文章

  1. Java设计模式之《桥接模式》及应用场景

    摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6497919.html 这里摘抄一份他处的概念,你可以不必理会,先看下面得讲解与实例, ...

  2. 实例解析Python设计模式编程之桥接模式的运用

    实例解析Python设计模式编程之桥接模式的运用 这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下 我们先来看一个例子: #e ...

  3. java23种设计模式——七、桥接模式

    原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...

  4. Net设计模式实例之桥接模式( Bridge Pattern)

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

  5. [设计模式] javascript 之 桥接模式

    桥接模式说明 定义:分离抽象化与实现化,使之可以自由独立的变化: 说明:由于软件环境需求原因,使得类型抽象具有多种实现以自身变化定义等情况,这使得我们要分离抽象实现与具体实现,使得抽象化与实现化解耦, ...

  6. 设计模式学习之桥接模式(Bridge,结构型模式)(15)

    参考地址:http://terrylee.cnblogs.com/archive/2006/02/24/336652.html 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化, ...

  7. 【读书笔记】读《JavaScript设计模式》之桥接模式

    桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化. 一.使用场景 使用场景一:事件监控 对于前端而言,最典型的使用场景——事件监控.如—— addEvent(element ...

  8. Java设计模式系列之桥接模式

    桥接模式(Bridge)的定义 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地 ...

  9. java设计模式-----14、桥接模式

    Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction ...

  10. 设计模式学习心得<桥接模式 Bridge>

    说真的在此之前,几乎没有对于桥接模式的应用场景概念. 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来 ...

随机推荐

  1. django admin后台管理功能的学习

    1.简要说明 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: from django.contrib import a ...

  2. CUDA C++ Extensions

    敲代码的时候总是会去CUDA官方文档中找找思路,感觉每次看英文文档都要耗费一点时间来翻译,干脆自己翻译一下便于以后查阅.官方文档:cuda-c-language-extensions 目录 函数修饰符 ...

  3. 推荐一款技术人必备的接口测试神器:Apifox

    1. 背景 作为互联网行业技术从业者,接口调试是必不可少的一项技能,通常我们都会选择使用 Postman 这类工具来进行接口调试,在接口调试方面 Postman 做的确实非常出色.当然除了Postma ...

  4. JavaFX布局神器-SceneBuilder

    JavaFX允许开发使用FXML来设计和布局界面,跟Qt和Android的布局有点类似,JavaFX用SceneBuilder来设计和布局界面. SceneBuilder最新的下载地址:https:/ ...

  5. python函数里引用全局变量

    python在引用变量的时候尤其要注意变量的作用域,在函数里引用不可变类型变量的时候,函数执行结束后是不会改变全局变量的值的:若想在函数里改变不可变类型全局变量的值时,引用的时候要用”global a ...

  6. Redis一站式管理平台工具,支持集群创建,管理,监控,报警

    简介 Redis Manager 是 Redis 一站式管理平台,支持集群的创建.管理.监控和报警. 集群创建:包含了三种方式 Docker.Machine.Humpback: 集群管理:支持节点扩容 ...

  7. matplotlib示例

    plt.plot 内只有一个列表示例 import matplotlib.pyplot as plt lst = [4.53,1.94,4.75,0.43,2.02,1.22,2.13,2.77] p ...

  8. isinstance方法判断可迭代和迭代器

    from collections import Iterable print(isinstance([],Iterable)) print(isinstance( {}, Iterable)) pri ...

  9. PHP scandir() 函数

    ------------恢复内容开始------------ 实例 列出 images 目录中的文件和目录: <?php$dir = "/images/"; // Sort ...

  10. PHP simplexml_load_file() 函数

    实例 转换 XML 文件为 SimpleXMLElement 对象,然后输出对象的键和元素: <?php高佣联盟 www.cgewang.com$xml=simplexml_load_file( ...