文章目录

  • 一、使用场景
  • 二、实现方法
  • 三、优势与劣势
  • 四、经典案例

本文笔记来自于: 狂神的设计模式

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构模型,又称为柄体(Handle and Body)模式或接口(interface)模式。


一、使用场景

​ 我们观察以下结构,如果我们用java的类的继承关系去表示如下这张图的话,会发现修改起来非常麻烦。比如:

  • 新增一个品牌,需要在台式电脑笔记本电脑平板电脑三个类下再写三个子类

  • 新增一种电脑(人体电脑),就需要在这种电脑下再增加三个品牌

    我们再观察叶子节点的类:联想台式戴尔台式,可以发现每个类负责了两种职能:品牌和电脑类型,违反了单一职责原则

所以我们引入了桥接模式,我们发现最后的类是由类型品牌组装而来,我们下次再增加品牌或者类型,只需要坐标节点即可:


二、实现方法

我们需要抽象出 品牌类类型类

//我们首先写一个品牌的接口,里面有一个info方法,输出品牌信息//品牌
public interface Brand{void info();
}

接下来我们写两个品牌实现这个接口:

//联想品牌
public class Lenovo implements Brand{@Overridepublic void info() {System.out.print("联想电脑");}
}//苹果品牌
public class Apple implements Brand{@Overridepublic void info() {System.out.print("苹果电脑");}
}

我们之后写一个关于类型的抽象类(这里注意,我们需要与品牌关联,所以我们使用组合的方式,将品牌注入到我们的类型中):

//抽象的电脑类型类
public abstract class Computer {//出厂的时候自带了品牌 (桥)protected Brand brand;//组装public Computer(Brand brand){this.brand = brand;}public void info(){//自带品牌brand.info();}
}

最后我们编写类型的具体类,每个类都有类型:

class Desktop extends Computer{public Desktop(Brand brand){super(brand);}@Overridepublic void info(){//自带品牌super.info();System.out.println("台式机");}
}class Laptop extends Computer{public Laptop(Brand brand){super(brand);}@Overridepublic void info(){//自带品牌super.info();System.out.println("笔记本");}
}

类图如下:


三、优势与劣势

好处分析:

  • 桥接模式偶尔类似于多继承方案,但是多继承方案违背了类的单一职责原则, 复用性比较
    差,类的个数也非常多,桥接模式是比多继承方案更好的解决方法。极大的减少了子类个数,从而降低管理和维护的成本

  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。符合开闭原则,就像一座桥, 可以把两个变化的维度连接起来!

劣势分析:

  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

四、经典案例

  • java 平台通过虚拟机实现平台无关性

  • jdbc 驱动程序

2.设计模式-桥接模式相关推荐

  1. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  2. 【学习笔记】ABAP OOD设计模式 - 桥接模式

    ABAP OOD设计模式 - 桥接模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 桥接模式又称为桥梁模式,在程序开发中,采用不同的维度分解一系列对象,然后采用组 ...

  3. 跟着ZHONGHuan学习设计模式--桥接模式

    转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...

  4. 设计模式--桥接模式(Bridge)

    设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...

  5. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  6. 23种设计模式——桥接模式

    文章目录 23种设计模式--桥接模式 1.桥接模式概述 2.桥接模式结构 3.桥接模式的实现 4.桥接模式的注意事项和细节 23种设计模式--桥接模式 1.桥接模式概述 桥接模式介绍 桥接(Bridg ...

  7. 设计模式——桥接模式实验报告

    目录 设计模式--桥接模式实验报告 一.实验题目 二.所用模式结构视图 三.本实例类图 四.实例实现代码 1.抽象消息类 2.普通消息类 3.加急消息类 4.特急消息类 5.实现发送消息的统一接口: ...

  8. Java设计模式-桥接模式 理论代码相结合

    继Java设计模式-装饰器模式后的桥接模式出来了,感兴趣的话,就来看一看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢 ...

  9. 结合JDK源码看设计模式——桥接模式

    前言: 在我们还没学习框架之前,肯定都学过JDBC.百度百科对JDBC是这样介绍的[JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Jav ...

最新文章

  1. “cyl projection cannot cross pole” 解决方法
  2. JavaScript 原型继承
  3. mockito_Mockito – JAXB的RETURNS_DEEP_STUBS
  4. 在loadrunner中使用winsocket协议编写脚步三部曲
  5. [导入]人的一生能有几天?
  6. 【进程】进程通信-共享内存
  7. CentOS7.2.1511 安装Mysql-5.7.13
  8. javascript学习之对象基础
  9. DSP5509项目之用FFT识别钢琴音调(5)之开始傅里叶变换
  10. 怎么用eclipse修改web工程的访问路径
  11. 软件测试 | 手把手教你快速掌握 Monkey 工具,指令参数+APK集合测试
  12. JavaScript图片旋转缩放、像素矩阵获取
  13. 云安全软件市场现状研究分析报告 -
  14. docker之数据挂载端口暴漏
  15. ​最适合女生的10个副业(上篇),只要你有执行力,实现财富自由很简单!
  16. 如何部署简单腾讯云服务器
  17. Arduino ESP8266当中的yield 函数
  18. 融合办公时代来了?联想Filez带你正确解读“融合办公”新模式
  19. Navicat导入向导说明
  20. 英国物理学家冷嘲中微子超光速发现

热门文章

  1. python为什么叫爬虫-可以写爬虫的那么多,为什么只有python火了?
  2. python怎么读取csv文件-Python读取csv文件(详解版,看了无师自通)
  3. python和java的区别-java和python的区别
  4. python工资高还是java-Python工资高还是Java工资高?Python和Java学哪个?
  5. python 下载文件-python下载文件的三种方法
  6. php中sisson用法,详细介绍php中session的用法
  7. 【python笔记】:python简介
  8. 递归处理二叉树总结(附leetcode题)
  9. 一些VC的快捷键以及调试技巧
  10. matlab矩阵作分钟平均,提高matlab运行速度和节省空间的心得合集(ZT)