1 意图:将抽象部分与实现部分分离,使得它们都可以独立地变化

2 别名:Handle/Body

3 动机:客户在创建窗口时应该不涉及到具体实现部分。仅仅是窗口的实现部分依赖于应用运行的平台。

客户代码在创建窗口时,就不应涉及到特定平台。

接口  实现(Imp)

4 适用性:

. 不希望在抽象和实现部分之间有一个固定的绑定关系。在运行时刻,实现部分可以被选择或切换。

. 类的抽象以及它的实现部分可以通过生成子类的方法加以扩充,可以对不同的接口和实现部分进行组合,分别对它们进行扩充。

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

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

. 这种类层次结构成为嵌套的普化

. 多个对象间共享实现,对客户透明

5 参与者:

. Abstraction:

定义抽象类的接口,维护一个指向Implementor对象的指针。

. RefinedAbstraction:

扩充由Abstraction定义的接口

. Implementor:

定义实现类的接口,该接口不一定要与Abstraction接口完全一致,实际上二者可以完全不同。

Implementor提供基本操作,Abstraction定义了基于这些基本操作的较高层次的操作。

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

6 协作:

Abstraction将client的请求转发给它的Implementor对象。

7 效果:

有点:

1)分离接口与其实现部分

一个接口的实现未必绑定在一个接口上。抽象类的实现可以在运行时刻进行配置,一个对象设置在运行时刻改变它的实现。

有助于降低对实现部分编译时刻的依赖。改变一个实现类时,不需要重新编译Abstraction和客户程序。

接口与实现分离,有助于分层,从而产生更好的结构化系统。系统的高层仅需要知道Abstraction和Implementor

2)提高可扩充性

可以独立地Abstraction和Implementor的层次进行扩充

3)实现细节对客户透明:

8 实现:

注意:

1)仅有一个Implementor

2)创建正确的Implementor对象 可以引入一个factory对象,由它创建具体的实现对象

3)共享Implementor:Handle/Body Body有一个引用计数器,Handle对它进行增减操作。

4)采用多重继承机制:将抽象接口和它的实现结合起来。 静态继承,所以并非真正的bridge

9 相关模式:

. 抽象厂可以创建和配置一个Bridge模式

. Adapter帮助无关的类协同工作通常系统设计完成后才会被使用。Bridge在设计开始前就使用,抽象接口和实现部分独立改变。

最新文章

  1. SSH正反向隧道
  2. maven项目报:An error occurred while filtering resources
  3. chm格式文件能打开,但看不到内容问题
  4. Sqli-labs less 39
  5. org.openqa.selenium.remote.SessionNotFoundException: The FirefoxDriver cannot be used after quit() was called.
  6. 类 的重载(Overloads)与隐藏(Shadows)
  7. Android开发匹配字符笔记
  8. 最长公共子序列Lcs(打印路径)
  9. css3基本属性
  10. UIAutomatorViewer增加xpath查看
  11. hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同
  12. 各种Queue分析
  13. vue2.0细节剖析
  14. android:theme
  15. Coursera台大机器学习技法课程笔记09-Decision Tree
  16. C#编程(六十五)----------表达式树
  17. Vue-cli 配置开发环境让测试服务器监听所有IP
  18. awk循环语句-【AWK学习之旅】
  19. Red Hat 6.5 Samba服务器的搭建(匿名访问,免登录)
  20. miniui dataGrid drawcell事件

热门文章

  1. Array与ArrayBuffer
  2. CSS 中的内联元素、块级元素以及display的各个属性的特点
  3. English随笔1
  4. 关于Thread.IsBackground属性的理解(转载)
  5. on-my-zsh agnoster 主题设置问题
  6. 在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可。
  7. Java集合---ArrayList的实现原理
  8. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数002·AI人工智能
  9. MyEclipse启动慢的办法
  10. 关于华擎X99+5820K