1. 结构

    1. 桥接模式将抽象部分与它的实现部分解耦,使得两者都能够独立变化。
    2. 抽象类Abstraction+扩充抽象类RefinedAbstraction+实现类接口Implementor+具体实现类ConcreteImplementor
    3. 其中抽象类定义了一个实现类接口类型的成员对象并维护该对象;扩充抽象类扩充由抽象类定义的接口,实现了在抽象类中声明的抽象业务方法;实现类接口声明了一些基本操作,而具体实现交给其子类完成;具体实现类具体实现了实现类接口,在不同的具体实现类中提供基本操作的不同实现。
  2. 适用环境

    1. 如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过桥接模式可以使它们在抽象层建立一个关联关系。
    2. 抽象部分和实现部分可以通过继承的方式独立扩展而互不影响,在程序运行时可以动态地将一个抽象化的对象和一个实现化子类的对象进行组合,即系统需要抽象化角色和实现化角色进行动态耦合。
    3. 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展。
    4. 对于那些不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
  3. 实例

    1. 某软件公司要开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如TXT、XML、PDF等格式,同时该工具需要支持多种不同的数据库类型。试使用桥接模式对其进行设计并使用java代码编程模拟实现。
    2. public class Data {
      }public interface DataBase {public Data ExportData();
      }
      public class DB2Impl implements DataBase {@Overridepublic Data ExportData() {System.out.print("导出db2数据,");return new Data();}
      }
      public class MysqlImpl implements DataBase {@Overridepublic Data ExportData() {System.out.print("导出mysql数据,");return new Data();}
      }
      public class OraclelImpl implements DataBase {@Overridepublic Data ExportData() {System.out.print("导出oracle数据,");return new Data();}
      }public abstract class FileFormat {protected DataBase dataBase;public void setDataBase(DataBase dataBase) {this.dataBase = dataBase;}public abstract File convertData();}
      public class XmlFileFormat extends FileFormat {@Overridepublic File convertData() {Data data = dataBase.ExportData();System.out.println("转换为xml格式文件");return null;}
      }
      public class TxtFileFormat extends FileFormat {@Overridepublic File convertData() {Data data = dataBase.ExportData();System.out.println("转换为txt格式文件");return null;}
      }
      public class PdfFileFormat extends FileFormat {@Overridepublic File convertData() {Data data = dataBase.ExportData();System.out.println("转换为pdf格式文件");return null;}
      }public class Client {public static void main(String[] args) {DataBase dataBase = (DataBase) XMLUtils.getBean("bridgePatternImplementor");FileFormat fileFormat = (FileFormat) XMLUtils.getBean("bridgePatternAbstractor");fileFormat.setDataBase(dataBase);fileFormat.convertData();}
      }控制台输出:
      导出db2数据,转换为pdf格式文件
      <?xml version="1.0" encoding="UTF-8"?>
      <config><bridgePatternImplementor>structuralPattern.bridgePattern.DB2Impl</bridgePatternImplementor><bridgePatternAbstractor>structuralPattern.bridgePattern.PdfFileFormat</bridgePatternAbstractor>
      </config>

结构设计模式之桥接模式相关推荐

  1. java桥接和装饰_设计模式:桥接模式和装饰模式

    原标题:设计模式:桥接模式和装饰模式 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是&qu ...

  2. C++设计模式之桥接模式

    这篇文章主要介绍了C++设计模式之桥接模式,本文讲解了什么是桥接模式.为什么要使用桥接模式.什么时候使用桥接模式等内容,需要的朋友可以参考下 问题描述 现在要去画一个图形,图形有长方形.圆形和扇形等等 ...

  3. 详解设计模式:桥接模式

    桥接模式(Bridge Pattern)也称为桥梁模式.接口模式或者柄体模式,有点像适配器模式,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 桥接模式 是用于把抽象化与实现化解耦,使得二 ...

  4. 设计模式之—— 桥接模式 Bridge

    定义 将抽象与实现分离,使它们可以独立变化. 他是用 组合关系 代替 继承关系 ,从而降低了抽象和实现两个维度的耦合度. 结构和实现 桥接模式包含以下角色: 抽象化角色:定义抽象类,并包含一个对实现化 ...

  5. 设计模式之桥接模式详解(附应用举例实现)

    文章目录 1 桥接模式介绍 2 桥接模式详解 2.1 桥接模式结构 2.2 桥接模式实现 2.3 桥接模式应用实例 1 桥接模式介绍 毛笔和蜡笔是两种很常见的文具,它们都归属于画笔.假设我们需要大.中 ...

  6. java 设计模式之桥接模式,策略模式

    java 设计模式之桥接模式,策略模式 1.引出设计模式 相信大家都玩过王者荣耀这款游戏.我们知道现在大概有九十多个英雄且各自技能及背景故事.台词.被动都不一样而且还带着召唤师技能比如实现,惩戒,弱化 ...

  7. 《设计模式》桥接模式

    <设计模式>设计模式的基本原则 <设计模式>单例模式 <设计模式>工厂模式 <设计模式>原型模式 <设计模式>建造者模式 <设计模式& ...

  8. php设计模式之桥接模式

    php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...

  9. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

最新文章

  1. winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行
  2. 【学术相关】2020 图灵奖发布,两位编程语言先驱、《龙书》作者获奖
  3. json文件读取并转换成为字典python
  4. boost::phoenix::function相关的测试程序
  5. 戴明博士:管理的十四项原则
  6. [读书笔记]TCP/IP详解V1读书笔记-4 5
  7. unittest Module中的常用6种断言方法
  8. 云资源管理有助于减少服务滥用和开支
  9. java 不定长参数实现原理
  10. nginx配置中location匹配规则详解
  11. 读取其他软件页面数据_电脑软件分享之硬盘数据完美恢复
  12. 趣图:21 副 GIF 动图让你了解各种数学概念
  13. 文字垂直居中(HTML、CSS)
  14. AdvStringGrid 复选框、goRowSelect
  15. oracle trace详解,Oracle autotrace参数详解
  16. Hudi on Flink 快速上手指南
  17. CAJViewer安装报错卸载报错打开报错解决流程
  18. matlab列主元消去法求逆矩阵,Gauss-Jordan列主元消元法求逆矩阵
  19. GTA5最新线上小助手
  20. 实现调用阿里云API第一章——API请求与认证

热门文章

  1. Elasticsearch的核心原理
  2. chatgpt api接口反应慢
  3. jQuery随笔20190713(jQuery HTML、遍历、Ajax)
  4. js 截取指定字符串
  5. fget和fput http://www.unixresources.net/linux/clf/linuxK/archive/00/00/69/66/696637.html
  6. javaScript中获取元素的id
  7. Qt-FFmpeg开发-视频播放(3)
  8. 支付宝要做中国版Amazon Go 开无人超市?
  9. spring+thymeleaf实现表单验证数据双向绑定
  10. 办公室布置(2013)