目的:

将抽象与抽象方法的实现相分离,使得它们可以独自变化。常用于驱动程序中,使得顶层逻辑不受驱动底层改变的影响,如数据库的变化。

关键词:Bridge, 抽象与实现分离,驱动程序

必要性:从一般抽象类层次结构到Bridge模式

"抽象(abstraction)"指依赖一系列抽象方法的类,通过具体子类的继承,这些抽象方法可以有多种不同的实现。一般的类层次结构如图一。

图一

在上述的类层次结构中,抽象类Manager定义了必要的行为(start和stop),具体类ConcreteManager1和ConcreteManager2根据控制对象的不同各自的实现。如果已有现存的具体实现可以采用Adapter(适配器)模式中的对象适配方式,类层次如图二:

图二

以前的程序通常遵循这样的结构。但是,这样的层次存在明显的不足。例如我们要引入新的控制行为,如设置与机器的交互参数setParam()。根据上述的类层次,我们只能执行如下扩展,如图三所示。

图三

如果要扩展5种Manager,那么就要扩展5个类,即使setParam中包含的代码都相同,因为不同种类的Manager对应于不同种类的机器。

因此我们寻求Bridge(桥接)模式,将抽象与抽象实现相分离,实现两个平面上的自由扩展,类层次如图四。

图四

上述结构中,Driver向Manager提供统一的接口,并由ConcreteDriver来具体实现。对于应用层逻辑的新需求,只需要继承Manager类扩展即可。

应用:驱动程序中的Bridge(桥接)模式

驱动程序包含Adapter和Bridge两种模式。其中,每个驱动程序都是Adapter模式的一个实例,利用其他类的不同接口适配用户要求的接口(位于ConcreteDriver的实现部分);使用驱动程序的应用层逻辑是Bridge模式的一个实例,将应用程序的开发与驱动开发分离。一个好的例子是JDBC。

设计模式的出发点是什么?就是可扩展性,也就是在不改变原来类结构的基础上引入新的特性。

接口型模式(二)Bridge(桥接)模式的更多相关文章

  1. 设计模式(八):Bridge桥接模式 -- 结构型模式

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度 ...

  2. Bridge - 桥接模式

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度 ...

  3. 一天一个设计模式——Bridge桥接模式

    一.概念准备 在理解桥接模式之前,先要理解面向对象程序设计中的两个概念: 类的功能层次结构:假设现在有一个类Something,这个类有一些成员属性和成员方法,但是现有的功能不能满足要求,因此我们想扩 ...

  4. C++设计模式-Bridge桥接模式

    作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...

  5. NET设计模式 第二部分 结构性模式(8):桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern) ——.NET设计模式系列之九 Terrylee,2006年2月 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维 ...

  6. Bridge桥接模式(结构型模式)

    现有一个需求,一个游戏系统需要构建不同风格的房屋,暂不考虑其他设计模式,需要能实现在PC端.移动端....等等多个平台的构建.最简单的实现方式如下: /// <summary> /// 房 ...

  7. 设计模式07: Bridge 桥接模式(结构型模式)

    Bridge 桥接模式(结构型模式) 抽象与实现 抽象不应该依赖于实现细节,实现细节应该依赖于抽象. 抽象B稳定,实现细节b变化 问题在于如果抽象B由于固有的原因,本身并不稳定,也有可能变化,怎么办? ...

  8. Bridge桥接模式(设计模式11)

    在没有使用桥接模式: 扩展新问题(类归属膨胀问题) 1增加性的电脑类型,要增加每个品牌下面的类 2如果要增加一个新的电脑品牌,要增加美中电脑类型的类 违背单一职责原则: · 一个类:联想笔记本,有两个 ...

  9. (转载)设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题

    解决问题的博客地址:设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题 遇见的问题: 1.VMnet8无法设置为桥接模式 结论:只要主机网络可被桥接,VMnet8根本不需要设为桥接模 ...

  10. Bridge桥接模式

    当我们的功能要在多个维度进行扩展时,各个维度之间可以交叉组合,就可以考虑使用桥接模式. 将抽象部分与实现部分分离,使它们都可以独立的变化.                                ...

随机推荐

  1. 使用python实现两个文件夹里文件的对比(包含内容的对比)

    #-*-coding:utf-8-*- #=============================================================================== ...

  2. NAT路由器打洞原理

    什么是打洞,为什么要打洞 由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换. 下面是我在网上找到的一副图 一般来说都是由私网内主机(例如上图中“ ...

  3. http之206状态码

    206状态码, 大概就是浏览器先不下载要下载的文件,而是弹窗告诉用户,该文件是什么,有多大.由用户自行决定是否下载. 在html中,加一个a标签,a标签的地址是一个文件,就可实现该效果. 具体可参考下 ...

  4. SpringCloud微服务实战——第三章服务治理

    Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...

  5. touch: cannot touch '/usr/local/tomcat/logs/catalina.out': Permission denied解决方法

    一.报以下错误: ./startup.sh Using CATALINA_BASE: /usr/local/tomcat702 Using CATALINA_HOME: /usr/local/tomc ...

  6. Azure上Linux VM误配防火墙的恢复方法

    在实际运维中,防火墙把自己挡在机器外面的情况会时有发生.如何快速的恢复对运维人员是很重要的. 本文将介绍如何用Azure Extension实现不通过ssh对VM进行操作的方法. 之前写过一遍Blog ...

  7. Azure的CentOS上安装LIS (Linux Integration Service)

    Azure上虚拟化技术都是采用的Hyper-v,每台Linux虚拟机都安装了LIS(Linux Integration Service).LIS的功能是为VM提供各种虚拟设备的驱动.所以LIS直接影响 ...

  8. POJ2773(容斥原理)

    Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11458   Accepted: 4001 Descr ...

  9. java流2

    总结:字符转换 package com.b; //流类 import java.io.*; public class uy { // 读取字符 public static void main(Stri ...

  10. Dubbo入门之一:实例1

    原文地址:http://blog.csdn.net/ruishenh/article/details/23180707?utm_source=tuicool 1.   概述 Dubbo是一个分布式服务 ...