桥接模式定义


將抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。

Decouple an abstraction from its implementation so that the two can vary independently.

单从定义来看,读者未必能够真正理解桥接模式的含义,假设我们有这样的应用场景,在一个CAD系统中我们需要绘制矩形、圆形、长方形三种图形,同时绘制的图形需要有蓝色、红色、绿色三种版本,此时我们至少有两种设计方案:

1.为每一种形状各自提供一套不同颜色的版本。

2.根据实际需要对图形和颜色进行任意组合。

两种设计方案对比:
第一种方案需要9个类,而且每增加一个颜色或图形系统中都要增加多个类。
第二种只需要6个类,且每增加一个一个形状或颜色只增加一个类。

像这种有两个维度的情况采用方案二进行设计,能够减少系统中类的个数,且系统扩展更为方便。设计方案二就是传说中的桥接模式的应用。桥接模式將继承关系转换为聚合关系,从而降低了类之间的耦合度。

桥接模式结构

桥接模式结构如下图所示:
桥接模式包含如下几个角色:
  • Abstraction:抽象类
  • RefinedAbstraction:扩充抽象类
  • Implementor:实现类接口
  • ConcreteImplementor:具体实现类

源代码

实现类接口Implementor:
public interface Implementor {
void operationImpl();
}

实现类ConcreteImplementorA:

public class ConcreteImplementorA implements Implementor{

	@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA operationImpl");
} }

实现类ConcreteImplementorB:

public class ConcreteImplementorB implements Implementor{

	@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB operationImpl");
} }

抽象类Abstraction:

public class ConcreteImplementorB implements Implementor{

	@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB operationImpl");
} }

扩充抽象类RefinedAbstraction代码:

public class RefinedAbstraction extends Abstraction{

	@Override
public void operation() {
this.getImpl().operationImpl();
} }

客户端Client:

public class Client {

	public static void main(String[] args) {
Abstraction abs = new RefinedAbstraction();
//具体实现交给客户端选择
Implementor impl = new ConcreteImplementorB();
abs.setImpl(impl);
abs.operation();
}
}

桥接模式的核心思想就是变继承关系为聚合关系,再回到绘制不同颜色图形的例子,使用桥接模式设计类图如下,具体的颜色由客户端进行选择。











设计模式之桥接模式(Java语言描述)的更多相关文章

  1. 设计模式之桥接模式——Java语言描述

    桥接适用于把抽象化和实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦 这种模式设计到一个作为桥接的接口,使得实体类的功能独立 ...

  2. 设计模式之迭代器模式——Java语言描述

    迭代器模式是Java和.NET编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示 介绍 意图 提供一种方法顺序访问一个聚合对象中各个元素,无需暴露该对象的内 ...

  3. 设计模式之解释器模式——Java语言描述

    解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式被用在SQL解析.符号处理引擎等 介绍 意图 给定一个语言,定义它的文 ...

  4. 设计模式之原型模式——Java语言描述

    原型模式是用于创建重复对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式 这种模式实现了一个原型接口,该接口用于创建当前对象的克隆.当直接创建对象的代价比较大时,则适 ...

  5. 设计模式之外观模式——Java语言描述

    外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.它想现有的系统添加了一个接口,以隐藏系统的复杂性 介绍 意图 为子系统中的一组接口提供了一个一致的界面,外观模式定义了一个高层接 ...

  6. 设计模式之组合模式——Java语言描述

    组合模式又叫做部分整体模式,适用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次 介绍 意图 将对象组合成树形结构以表示"部分-整体" ...

  7. 设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  8. 设计模式之责任链模式——Java语言描述

    责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不 ...

  9. 设计模式之适配者模式——Java语言描述 | Amos H's blog

    适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模糊属于结构性模式,它结合了两个独立接口的功能 概念阐述 使用适配器模式可以解决在软件系统中,将一些旧的类放入新环境中,但是新环境要求的接口旧 ...

  10. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

随机推荐

  1. DP背包问题小总结

    DP的背包问题可谓是最基础的DP了,分为01背包,完全背包,多重背包 01背包 装与不装是一个问题 01背包基本模型,背包的总体积为v,总共有n件物体,每件物品的体积为v[i],价值为w[i],每件物 ...

  2. CF51F Caterpillar (边双+树形DP)

    题目传送门 题目大意:给你一张n个点m条边的图.每次操作可以把两个点合并成一个(与之相连的边也都要连到新点上).求把图中每个联通块都变成“毛毛虫”的最小操作次数.“毛毛虫”必须是一棵树(可以存在自环) ...

  3. linu学习第一天:基础知识

    1 bc 计算器 2 ibase=2 以二进制输入,输出10进制 3 obase=2 输出二进制 4 enable --查看内部命令 5 #第一天的命令 6 enable --查看内部命令 7 ena ...

  4. Linux - VMware和Centos安装

    目录 Linux - VMware和Centos安装 选择性 下载centos系统ISO镜像 安装虚拟机VMware虚拟机 1. 准备vmware软件 2. 解压软件包, 当前选择vm12 3. vm ...

  5. STM32串口IAP实验笔记

    STM32的IAP功能确实方便,以前对此如何实现有所了解,但是一直没去测试,这两天来练了下,可谓困难重重,搞了两天问题也一一解决,下面做些简要的笔记 IAP就是在线应用编程,方便程序升级,可以不用打开 ...

  6. 洛谷 2147 SDOI2008 Cave 洞穴勘测

    [题解] 动态树模板题,只要求维护森林的连通性,直接上板子即可. #include<cstdio> #include<algorithm> #define N 500010 # ...

  7. maven是干什么的?

    最近在研究后台相关的东西,虽然前端还不是很了解吧~但是计算机一年没写后台代码,我快废掉了呀~emmmmm....他们老是和我说maven,恩恩,那就看看到底是啥?从大神聚集的知乎上拉了一篇过来~存档: ...

  8. java如何实现替换指定位置的指定字符串的功能

    /**  * @创建日期 2013-07-15  * @创建时间 14:25:59  * @版本号 V 1.0  */ public class CosTest {     public static ...

  9. HDU2899 Strange fuction 【二分】

    Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. codeforces Looksery Cup 2015 D. Haar Features

    The first algorithm for detecting a face on the image working in realtime was developed by Paul Viol ...