1.意图

将抽象部分与它的实现部分分离。使他们都能够独立地变化。

2.别名

Handle/Body

3.动机

当一个抽象对象可能有多个实现时,通经常使用继承来协调它们。抽象类定义对该抽象的接口。而详细的子类则用不同方式加以实现。可是此方法有时不够灵活。

继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立的进行改动、扩充和重用。

4.适用性

下面情况使用Bridge模式:

  • 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。

    比如这样的情况可能是由于,在程序执行时刻实现部分应能够被选择或者切换。

  • 类的抽象以及它的实现都应该能够通过生成子类的方式加以扩充。

    这时Bridge模式使你能够对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充。

  • 对一个抽象的实现部分的改动应对客户不产生影响,即客户的代码不必又一次编译。
  • (c++)你想对客户全然隐藏抽象的实现部分。

    在C++中。类的表示在类接口中是可见的。

  • 你想在多个对象间共享实现(可能使用引用计数),单同事要求客户并不知道这一点。

5.结构

桥接模式就是把事物和其详细实现分开。使他们能够各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者能够独立变化,像我们经常使用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候。在各个数据库之间进行切换。基本不须要动太多的代码。甚至丝毫不用动。原因就是JDBC提供统一接口。每一个数据库提供各自的实现。用一个叫做数据库驱动的程序来桥接即可了。我们来看看关系图:

6.代码演示样例

实现代码:

先定义接口:

public interface Sourceable {
public void method();
}

分别定义两个实现类:

public class SourceSub1 implements Sourceable {

    @Override
public void method() {
System.out.println("this is the first sub!");
}
} public class SourceSub2 implements Sourceable { @Override
public void method() {
System.out.println("this is the second sub!");
}
}

定义一个桥。持有Sourceable的一个实例:

public abstract class Bridge {
private Sourceable source; public void method(){
source.method();
} public Sourceable getSource() {
return source;
} public void setSource(Sourceable source) {
this.source = source;
}
} public class MyBridge extends Bridge {
public void method(){
getSource().method();
}
}

測试类:

public class BridgeTest {

    public static void main(String[] args) {

        Bridge bridge = new MyBridge();

        /*调用第一个对象*/
Sourceable source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method(); /*调用第二个对象*/
Sourceable source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}

output:

this is the first sub!

this is the second sub!

这样,就通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用。

接下来我再画个图,大家就应该明确了,由于这个图是我们JDBC连接的原理,有数据库学习基础的,一结合就都懂了。

7.相关模式

  • Abstract Factory模式能够用来创建和配置一个特定的Bridge模式。
  • Adapter模式用来帮助无关的类协同工作。它通常在系统设计完毕后才会被使用。然而,Bridge模式则是在系统開始时就被使用,它使得抽象接口和实现部分能够独立进行改变。

引用:

http://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm

http://item.jd.com/10057319.html

http://blog.csdn.net/zhangerqing/article/details/8239539

Structual设计--Bridge模式的更多相关文章

  1. Structual设计--Flyweight模式

    1.意图 运用共享技术有效地支持大量细粒度的对象. 2.别名 无 3.动机 有些应用程序得意于在其整个设计过程中採用对象技术,但简单化的实现代价极大.如我们在使用word的时候.假设设置正文字体为:t ...

  2. Bridge 模式

    Bridge 模式将抽象和行为划分开来,各自独立,但能动态的结合.在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是 ...

  3. 【结构型】Bridge模式

    桥接模式是为了将对象的抽象与实现分离,使得它们可以独立变化.简简单单的一句话,却已经是站在了更高抽象层面上来看待.设计.解决问题.平常我们多是对具体问题进行分析.抽象,然后就开始设计,这对多数情况下基 ...

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

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

  5. Java设计模式(6)桥模式(Bridge模式)

    Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用桥模式 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以 ...

  6. 设计模式初探-桥接(Bridge)模式

    桥接(Bridge)模式,又称Handle/Body模式,属于对象结构型模式.用于将抽象部分与它的实现部分分离,使它们都可以独立地变化.比如常见的电脑窗口界面,不同的操作系统其窗口界面绘制的原理肯定不 ...

  7. 桥(Bridge)模式

    Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用桥模式 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以 ...

  8. Android中Adapter和Bridge模式理解和应用

    一 Adapter模式 意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作. 适用性: 使用一个已存在的类,而它的接口 ...

  9. Bridge模式

    Bridge模式 Bridge模式 在面向对象的开发过程中,要做到2点:1.高内聚(cohesion).2.松耦合(coupling).可是在实际开发过程中难以把握,比如会遇到这种问题: 1)客户给了 ...

随机推荐

  1. POJ-1328-放置雷达

    这是一道贪心的题目,首先我们要知道,我们放置雷达的话我们可以做一个转换,就是已知岛屿的点坐标的时候,我们可以算一下,这个点以d为半径与x轴交点之间的线段在x轴上的投影,然后我们只需要在这个投影范围内设 ...

  2. PXE自动化安装系统

    准备(以centos7为例) ①关闭防火墙 ②关闭selinux ③dhcp服务设置为静态IP ④安装软件包 http:充当yum源安装包仓库 tftp-server :在它的工作目录存在引导主机的工 ...

  3. linux 部署nginx作为反向代理入口的内核参数/etc/sysctl.conf

    # Kernel sysctl configuration file for Red Hat Linux## For binary values, 0 is disabled, 1 is enable ...

  4. python基础003

    1. list 1.1 基础 list是一组有序的集合序列,可以包含任何类型且不必相同,并支持嵌套.采用如下创建方式: li = ["spam",2.0,5,[10,20]] 列表 ...

  5. 《C++专项练习》 — (2)

    序 C++基础专项练习二,,,水平依然不到家! 错题分析与总结 1 . 有如下模板定义: template <class T> T fun(T x,T y){ return x*x+y*y ...

  6. 杭电 4004 The Frog's Games 青蛙跳水 (二分法,贪心)

    Description The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog T ...

  7. HUD-1559 最大子矩阵,dp模拟

    最大子矩阵                                                                                               ...

  8. 如何在非localhost情况下访问Istio中的服务UI

    在使用Istio时经常会遇到需要用localhost访问服务UI才能看到相关的一些数据 但对于远程连接的时候使用localhost并不方便,所以需要修改一下它的部署文件,将原先的cluster IP改 ...

  9. JIRA 6.3.6安装

    一:下载JIRA 从官网下载:https://www.atlassian.com/software/jira/download 我下载的版本是Linux版的 JIRA 6.3.6 wget http: ...

  10. 洛谷P1504 积木城堡

    题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木 ...