当前位置: 首页 > news >正文

《java与模式》学习系列——桥梁模式

 

一、 桥梁(Bridge)模式的结构

桥梁模式的用意是在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系(继承是一种强耦合),从而使两者可以相对独立地变化。桥梁模式是用聚合关系实现的弱耦合解决方案。

结构图如下:

二、 桥梁模式在java中的应用

AWTPeer架构

JavaAWT中的每一个GUI构件都提供了一个Peer构件,这个Peer构件是所属的Java构件在本地环境中的实现化。比如Choice是一个AWT提供的GUI构件,它允许用户在一个列中选择一个或者多个项。一个Java应用程序的开发人员只需要考虑Choice对象被动态地与一个合适的底层Peer对象联系起来,这个Peer对象会按照指令执行正确的操作。这个将JavaGUI构件与本地环境的Peer构件联系起来的接口,就是所谓的Peer接口。一个Peer接口其实就是一个定义了Peer构件必须实现的各个方法的接口。

每一个java构件都是Component类型的子类,而每一个Peer构件都是ComponentPeer类型的子类,他们通过Toolkit对象相互通信,这正是桥梁模式的应用。

JDBC驱动器

大多数的驱动器都是桥梁模式的应用。

三、 桥梁模式与其他模式的关系

适配器模式

桥梁模式与适配模式很相似,但是适配器模式的目的是要改变已有的接口,让他们可以相容,以使没有关系的两个类能在一起工作。而桥梁模式是分离抽象和实现化,使得两者的接口可以不同。

四、在什么情况下使用桥梁模式

         1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免两个层次之间建立静态的联系。

         2、设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端的完全透明的。

         3、一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。

         4、虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

 

 

相关文章:

  • 《java与模式》学习系列——观察者模式
  • angularjs服务-service
  • 《java与模式》学习系列——迭代子模式
  • Werkzeug工具包学习-官方例子Shortly分析
  • 《java与模式》学习系列——责任链模式
  • iOS中的交换空间(swap space)
  • 《java与模式》学习系列——命令模式
  • Windows10中无法打开这个应用的解决方案
  • sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier...
  • 《java与模式》学习系列——状态模式
  • debian终端菱形乱码修复
  • 《java与模式》学习系列——访问者模式
  • 《java与模式》学习系列——解释器模式
  • C#调用windwos系统数据源配置
  • 《java与模式》学习系列——调停者模式
  • JS 中的深拷贝与浅拷贝
  • [译]前端离线指南(上)
  • 2018一半小结一波
  • angular2 简述
  • CSS魔法堂:Absolute Positioning就这个样
  • css属性的继承、初识值、计算值、当前值、应用值
  • input实现文字超出省略号功能
  • JavaScript 一些 DOM 的知识点
  • js 实现textarea输入字数提示
  • Laravel 实践之路: 数据库迁移与数据填充
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Netty源码解析1-Buffer
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PAT A1050
  • python 装饰器(一)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 前端js -- this指向总结。
  • 前端工程化(Gulp、Webpack)-webpack
  • 消息队列系列二(IOT中消息队列的应用)
  • Hibernate主键生成策略及选择
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​io --- 处理流的核心工具​
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • ${factoryList }后面有空格不影响
  • $GOPATH/go.mod exists but should not goland
  • (1)Android开发优化---------UI优化
  • (C语言)fread与fwrite详解
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)elasticsearch 源码之启动流程分析
  • (算法)Travel Information Center
  • (一)Dubbo快速入门、介绍、使用
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)JAVA中的堆栈
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。