问题:

当存在多个独立的变化维度时,如果仍采用多层继承结构,会急剧的增加类的个数,因此可以考虑将各个维度分类,使他们不相互影响。

定义:

将抽象部分与它的实现部分进行分离,抽象部分只保留最为本质的部分,而其他对该类的扩展均放到实现部分,进而使他们独立地变化。并在抽象层建立耦合,方便对各个维度进行扩展。

结构图:

  • Abstracttion:抽象类,是整个桥接模式所表述的各种类别的核心类,例如毛笔-颜色中的毛笔,图片-操作系统中的图片。首先它定义了扩展类中的接口,另外它还定义了一个关于实现类Implementor的成员对象impl,由此来与实现维度产生联系。
  • RefineAbstracttion:扩充抽象类,实现了抽象类定义的接口,即实现核心类的扩展操作,并且可以调用impl相关的业务方法。
  • Implementor:实现类接口,定义了与Abstraction另外一个维度的基本接口,其它继承类在此接口进行实现和扩展。Implementor的接口设计成Abstraction类的另一类属性和行为,对其进行修饰和相关操作。
  • ConcreteImple:具体实现类,实现了Implementor定义的接口,再具体程序中将替换父类,做具体的执行操作。

注意:

  • 使用桥接模式前,需要识别出两个独立变化的维度,然后将它们设计为两个独立的继承等级结构,并在抽象层建立耦合。对于固有特征可以设计为抽象部分,对于行为和属性可以设计为实现类。行为和其它属性与固有特征存在一种设置关系,可以使用成员对象进行关联。

  • 桥接模式和适配器模式的联合使用:桥接模式一般用于系统初步设计阶段,分析系统有哪些独立变化的维度,然后将其分解并在抽象层建立耦合。当初步设计完成,并在后期发现无法与已有类无法协同工作,可以使用适配器模式。

优点:

  • 分离抽象和实现两个维度,解耦抽象和实现的绑定关系,使得各个维度可以独立变化。提高系统的可扩展性,不需要修改原有系统。
  • 是设计模式基本原则的很好体现,符合开闭原则,单一职责原则,合成复用原则,里氏替换原则,依赖倒置原则,接口隔离原则等。

缺点:

  • 在分析和辨别两个维度的时候有一定的困难,并且增加系统复杂度。

适用情景:

  • 含有多个维度的独立变化的类结构,每个维度都可以扩展。
  • 避免在层次之间使用继承关系,通过桥接模式可以使用组合复用原则进行扩展。

实例:

BridgePattern.java

七个结构模式之桥接模式(Bridge Pattern)的更多相关文章

  1. 设计模式GOF23(结构型模式:代理模式,适配模式,桥接模式,组合模式,装饰模式,外观模式,享元模式)

    结构型模式: – 分类: • 适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式.享元模式 – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题.   结构 ...

  2. Linux下NAT模式和桥接模式的网络配置

        Linux下NAT模式和桥接模式的网络配置 最近在配置linux虚拟机的时候发现有很多坑,现在记录下来以防日后又跳到坑里. 我的运行环境是:主机 windows 7  虚拟机 Virtualb ...

  3. 虚拟机网络连接模式中桥接模式和NAT模式的区别

    1.桥接模式:当虚拟机系统的网络连接模式为桥接模式时,相当于在主机系统和虚拟机系统之间连接了一个网桥,而网桥两端的网络都属于同一网络,主机和虚拟机是处于同一网络中的对等主机. 实例,在使用Xshell ...

  4. VMware虚拟机上网络连接模式bridged(桥接模式)

    VMware虚拟机上网络连接模式bridged(桥接模式)的实质就是虚拟机本身利用主机的网卡对外直接作为一个真实的物理主机存在. 也就是理论上此时的虚拟机和主机没什么关系,只是和主机公用了一块网卡,其 ...

  5. 结构型模式(二) 桥接模式(Bridge)

    一.动机(Motivation) 在很多游戏场景中,会有这样的情况:[装备]本身会有的自己固有的逻辑,比如枪支,会有型号的问题,同时现在很多的游戏又在不同的介质平台上运行和使用,这样就使得游戏的[装备 ...

  6. 【设计模式】Bridge模式(桥接模式)

    最近的一次面试中,被问到桥接模式,以前呢并没有很仔细的研究过这个设计模式,借此机会剖析一下. 先给出自己对这个模式理解后的源码: interface A{ void methodA(); } inte ...

  7. GoF23种设计模式之结构型模式之桥接模式

    一.概述         将类的抽象部分与实现分部分离开来,使它们都可以独立地变化. 二.适用性 1.你不希望在抽象和实现之间有一个固定的绑定关系的时候.例如:在程序运行时实现部分应可以被选择或切换. ...

  8. java设计模式5.组合模式、门面模式、享元模式、桥接模式

    组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...

  9. 1_NAT模式和桥接模式下的网络配置

    相信当你看到这篇文章时,你一定对linux的桥接模式和NAT模式有所了解,所以你应该是能看懂这篇文件的,希望对你有所帮助,figthing    ! 一.桥接模式:虚拟机和主机是连在同一个路由下的. ...

随机推荐

  1. Liferay7 BPM门户开发之43: Gradle依赖管理

    进入liferay v7.0,官方推荐使用Gradle进行依赖管理和发布,所以必须知道Gradle的用法,网上资料很多,不赘述 只写依赖管理的分类 一般用外部仓库依赖,也可以用本地文件依赖(依赖本地j ...

  2. SSIS package 更新 variable

    在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一 ...

  3. KendoUI系列:TabStrip

    <link href="@Url.Content("~/Content/kendo/2014.1.318/kendo.common.min.css")" ...

  4. WP中的语音识别(上):基本识别

    WP 8.1目前许多内容仍处于未确定状态,因此,本文所提及的语音识别,是基于WP8的,在8.1中也差不多,也是使用运行时API来实现,如果大家不知道什么是运行时API,也没关系,不影响学习和开发,因为 ...

  5. WPF/Silverlight 下的图片局部放大

    最近的项目中也要用到一个局部图片放大的功能,园子里面一搜,发现(菩提下的杨过)杨大侠已经实现了. 请参见这里:http://www.cnblogs.com/yjmyzz/archive/2009/12 ...

  6. 后端码农谈前端(CSS篇)第四课:选择器补充(伪类与伪元素)

    一.伪类: 属性 描述 :active 向被激活的元素添加样式. :focus 向拥有键盘输入焦点的元素添加样式. :hover 当鼠标悬浮在元素上方时,向元素添加样式. :link 向未被访问的链接 ...

  7. art-template用户注册方法

    应用场景nodejs Express框架,使用art-template模板引擎. 后台注册方法代码: var template = require('art-template'); template. ...

  8. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  9. Socket桥(转载)

    最好方案:使用haproxy 或者nginx转发.自己写程序性能和监控难保证,推荐使用开源软件替代. 源地址为:http://baishaobin2003.blog.163.com/blog/stat ...

  10. Sparse Filtering 学习笔记(三)目标函数的建立和求解

      Sparse Filtering 是一个用于提取特征的无监督学习算法,与通常特征学习算法试图建模训练数据的分布的做法不同,Sparse Filtering 直接对训练数据的特征分布进行分析,在所谓 ...