桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

举个例子,对于笔记本的CPU评测,当安装Intel CPU的时候 评测分数比较高,而安装AMD CPU的时候,则评测分数相对低一些,这个是一唯影响,而配合上电脑品牌,就是二维影响

先看下面的代码

1 interfaceCpuAbility{2

3 String abilityCpu();4 }5

6 class AdmCpu implementsCpuAbility{7

8 publicString abilityCpu() {9 //TODO Auto-generated method stub

10 return "系能一般";11 }12 }13 class IntelCpu implementsCpuAbility{14 publicString abilityCpu() {15 //TODO Auto-generated method stub

16 return "系能比较牛";17 }18 }19

20 abstract classAbstractComputer{21

22 CpuAbility cpuAbility;23

24 publicAbstractComputer(CpuAbility cpuAbility){25 this.cpuAbility=cpuAbility;26

27 }28

29

30 public abstract voidcheckPcAbility();31

32 }33

34 class LenevoComputer extendsAbstractComputer{35

36 publicLenevoComputer(CpuAbility cpuAbility) {37 super(cpuAbility);38 //TODO Auto-generated constructor stub

39 }40

41 @Override42 public voidcheckPcAbility() {43 System.out.println("华硕笔记本CPU性能"+super.cpuAbility.abilityCpu());44 }45

46 }47 class IswComputer extendsAbstractComputer{48

49 publicIswComputer(CpuAbility cpuAbility) {50 super(cpuAbility);51 //TODO Auto-generated constructor stub

52 }53

54 @Override55 public voidcheckPcAbility() {56 System.out.println("IBM笔记本CPU性能"+super.cpuAbility.abilityCpu());57 }58

59 }

执行代码并输出

1 CpuAbility ability =newIntelCpu();2 AbstractComputer computer =newLenevoComputer(ability);3 computer.checkPcAbility();4 ability =new AdmCpu();//华硕笔记本CPU性能系能比较牛

5 computer =newIswComputer(ability);6 computer.checkPcAbility();//IBM笔记本CPU性能系能一般

可以看到,通过对象组合的方式,Bridge 模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这也是Bridge模式的本意。

Bridge模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

结构如下图所示:

参考地址:

http://blog.csdn.net/jason0539/article/details/22568865

http://hi.baidu.com/isswangqing/item/126e4318bd99a708e65c36b3

http://blog.163.com/xiaokangzhijia@126/blog/static/1659548562010111843618596/

http://www.blogjava.net/wangle/archive/2007/04/25/113545.html

java 桥接模式_《JAVA与模式》之桥接模式相关推荐

  1. 从java多态到策略模式_设计模式中的多态——策略模式详解

    2. 策略模式详解 2.1 策略模式定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户端而独立的变化. 可以使用多态进行类比来理解策略模 ...

  2. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  3. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  4. java 文本压缩_[Java基础]Java使用GZIP进行文本压缩

    import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...

  5. 工厂模式 构建者模式_实践中的构建者模式

    工厂模式 构建者模式 我将不深入讨论该模式,因为已经有大量的文章和书籍对此进行了详细的解释. 相反,我将告诉您为什么以及何时应该考虑使用它. 但是,值得一提的是,这种模式与< 四人帮>一书 ...

  6. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

  7. java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  8. emacs 编辑模式_作家的5种Emacs模式

    emacs 编辑模式 并非所有作家都在文字处理器的范围内工作. 我们中有很多人在不起眼的(有时不是那么不起眼的 )文本编辑器中敲出单词. 当您找到一个适合您的文本编辑器并按照您想要的方式工作时,您倾向 ...

  9. 使用商业模式的九大模块去分析京东的商业模式_【荐读】商业模式新生代

    ⊙投稿信箱:624380939@qq.com(欢迎您原创投稿) 作者:亚历山大·奥斯特瓦德.伊夫·皮尼厄 人生的长度是有限的,我们只能努力拓展人生的厚度和广度.感受经典的启迪与激励,做好我们的企业,思 ...

  10. 华为matepad切换电脑模式_华为MatePad Pro关于PC模式常用操作指南

    华为MatePad Pro关于PC模式常用操作指南移动办公时代,随时都有公务需要处理,平板虽然便捷,但是用于办公确不太方便,窗口应用切来切去,每次找文件,点了一层有一层,想要达到笔记本的办公效率,他必 ...

最新文章

  1. VClient 无法连接Vcenter
  2. win32ctypes.pywin32.pywintypes.error: (2, ‘LoadLibraryEx‘, ‘系统找不到指定的文件。‘)
  3. oracle 视图使用rownum,Oracle数据对象--视图
  4. 计算器是如何计算sin、cos等科学函数的值呢?
  5. php rss xml,php – 如何使用simplexml解析RSS中的标记
  6. java cancel_Java RunnableFuture.cancel方法代码示例
  7. linux 运行.net 5,.NET 5 将于2020年问世
  8. python下保持mysql连接,避免“MySQL server has gone away“方法
  9. 职业人应该“这山望着那山高”
  10. laraverl笔记
  11. 标签 'http' 已声明。标签名称在批查询或存储过程内部必须唯一。
  12. 使用PoolingHttpClientConnectionManager解决httpclient的多线程请求问题
  13. 【swarm测试极简指南】如何获得bzz奖励?0.6.2版本手动安装指南
  14. paip 破解网站手机验证码
  15. 大学十年(一个程序员的路程)(林锐博士)《1----9》
  16. yeezy350灰橙_新灰橙最高品质椰子350V2 对比正品进行测评,傻傻分不清!
  17. python怎么撤销_用Python玩转微信(三)—— 查看撤回消息
  18. 为什么总是黑php,怎么都在黑PHP?
  19. 中学-综合素质【8】
  20. GB50204-2015 混凝土结构工程施工质量验收规范 免费下载

热门文章

  1. 百度地图软件测试,使用 app-inspector 解析 i 调用百度地图定位的页面时 (iOS),会导致测试 app 崩溃...
  2. Cauchy-Schwarz Inequality for Integrals for any two functions clarification
  3. php 获取URL 各部分参数
  4. Javascript之 对象和原型
  5. JavaScrip调用腾讯地图
  6. Spring mvc 注解@ResponseBody 返回内容编码问题
  7. MyEclipse设置文件编码
  8. 批处理-文件比较生成
  9. js实现简单的图片轮播
  10. opencv如何截取子图像