概括

名称

Bridge

结构

动机

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

适用性

  • 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。

  • 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时B r i d g e 模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。

  • (C + +)你想对客户完全隐藏抽象的实现部分。在C + +中,类的表示在类接口中是可见的。

  • 有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。R u m b a u g h 称这种类层次结构为?嵌套的普化?(nested generalizations )。

  • 你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。一个简单的例子便是C o p l i e n 的S t r i n g 类[ C o p 9 2 ],在这个类中多个对象可以共享同一个字符串表示(S t r i n g R e p )。

解析

形象比喻:

BRIDGE—早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了

  桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。

1.Abstraction
      定义抽象类的接口。
      维护一个指向Implementor类型对象的指针。

2.RefinedAbstraction
      扩充由Abstraction定义的接口。

3.Implementor
      定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
      事实上这两个接口可以完全不同。
      一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。

4.ConcreteImplementor
      实现Implementor接口并定义它的具体实现。

实例

这里的例子是有 软件产品和硬件产品两类产品,与金属包装和塑料包装两类包装。

使用桥接模式将产品类和包装类结合起来,就可以使用四种状况了:

软件金属包装

软件塑料包装

硬件金属包装

硬件塑料包装

涉及的文件有:

Product.java

-- SoftwareProduct.java

--  HardwareProduct.java

Package.java

-- MetalPackage.java

-- PlasticPackage.java

TestMain.java

/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public abstract class Product {private String type;/*** @return the type*/public String getType() {return type;}/*** @param type*            the type to set*/public void setType(String type) {this.type = type;}
}
/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public class SoftwareProduct extends Product {public SoftwareProduct() {setType("Software");}public void pack(Package package0){package0.packProduct(this);}
}
/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public class HardwareProduct extends Product {public HardwareProduct() {setType("Hardware");}public void pack(Package package0) {package0.packProduct(this);}
}
/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public abstract class Package {public abstract void packProduct(Product product);
}
/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public class MetalPackage extends Package {/** (non-Javadoc)* * @see designptn.bridge.Package#packProduct(designptn.bridge.Product)*/@Overridepublic void packProduct(Product product) {// TODO Auto-generated method stubSystem.out.println(product.getType() + " pack Metal Package");}}
/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public class PlasticPackage extends Package {/** (non-Javadoc)* * @see designptn.bridge.Package#packProduct(designptn.bridge.Product)*/@Overridepublic void packProduct(Product product) {// TODO Auto-generated method stubSystem.out.println(product.getType() + " pack Plastic Package");}}
/**   * @author oscar999   * @date 2013-7-24* @version V1.0   */
package designptn.bridge;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProduct sProduct = new SoftwareProduct();Product hProduct = new HardwareProduct();Package mPackage = new MetalPackage();Package pPackage = new PlasticPackage();mPackage.packProduct(sProduct);pPackage.packProduct(sProduct);mPackage.packProduct(hProduct);pPackage.packProduct(hProduct);}}

[设计模式-结构型]桥接(Bridge )相关推荐

  1. 设计模式-结构型模式 -bridge 桥接模式

    桥接模式更注重:两个可变维度的拓展 不能用继承 容易造成类爆炸 四个角色:实现化 (定义接口方法 ) 具体实现化 implement实现化接口 并重写方法 抽象化 :聚合实现化接口 并初始化 重写方法 ...

  2. 设计模式-结构型-桥接

    #pragma once#ifndef BRIDEG_H #define BRIDEG_H class Implementor; // 维护一个Implementor 类的指针 class Abstr ...

  3. 设计模式(16):结构型-桥接模式(Bridge)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  4. 23种设计模式——结构型设计模式(7种)

    目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...

  5. 设计模式-结构型模式篇

    设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...

  6. 设计模式 - 结构型

    结构型设计模式 结构型模式(Structural Pattern)关注类和对象的组合.其描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. ...

  7. 设计模式-结构型模式-装饰模式

    设计模式-结构型模式-装饰模式 栗子 以成绩单需要家长签字为要求. 成绩单类图 // 抽象成绩单 public abstract class SchoolReport{// 成绩单你的成绩情况publ ...

  8. 设计模式学习笔记——桥接(Bridge)模式

    设计模式学习笔记--桥接(Bridge)模式 @(设计模式)[设计模式, 桥接模式, bridge] 设计模式学习笔记桥接Bridge模式 基本介绍 类的功能层次结构 类的实现层次结构 使用桥接模式的 ...

  9. 设计模式(结构型)之享元模式(Flyweight Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

最新文章

  1. oracle三种分区的方式,Oracle 分区表 总结大全(3)
  2. hadoop2.2.0安装,完全分布式安装
  3. SAP 预算控制业务集成
  4. 内存泄漏以及常见的解决方法
  5. 使用jsonEditor打造一个复杂json编辑器
  6. X Window Messing With The Mouse Cursor
  7. IBM的漂浮机器人,被马斯克的火箭送去太空了
  8. @EnableConfigurationProperties
  9. Warez 3D动画,超牛
  10. 华为发布鸿蒙Beta版公测,华为发布鸿蒙OS 2.0手机开发者Beta版:P40、Mate 30系列可申请公测...
  11. oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法)
  12. 屏蔽搜狗输入法快捷键
  13. 关于工业4.0和智能制造的总结以及背后的思考
  14. 使用mysql语句进行多表联查(以三个表为例)
  15. Codefoeces 581B Luxurious Houses
  16. 经典古诗词名句 mysql,中国古代经典古诗词名句
  17. 如何正确卸载Oracle避免卸载Oracle不干净解决一
  18. Python二叉树详解笔记
  19. 华为2288H v5服务器配置JBOD(硬盘直通)
  20. pandorabox开启ssr_华硕及PandoraBox固件如何启用SSH和SFTP连接

热门文章

  1. 家中路由添加静态IP映射(一)
  2. Webpack 配置摘要
  3. 海天味业打造高端调味品领衔食品美味
  4. HTTPS反向代理嗅探
  5. Objective-C代码学习大纲
  6. JQuery - Ajax和Tomcat跨域请求问题解决方法!
  7. 深度推荐模型(EDRMs):面向Web级应用的基于二进制码的Hash Embedding
  8. 【报告分享】新基建风口下,零售科技企业如何借势发展.pdf(附下载链接)
  9. cmake命令的python库的位置参数-DTORCH_PATH
  10. 剑指offer 面试题49. 丑数