4.2 BRIDGE(桥接) — 对象结构型模式

2018-01-02  本文已影响25人  10xjzheng
1 意图

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

2 别名

Handle/Body

3 动机

当一个抽象可能有多个实现时,通常用继承来协调它们。抽象定义对该抽象的接口,而具体的子类则用不同的方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。

让我们考虑在一个用户界面箱中,一个可移植的Windo抽象实现。例如,这一抽象部分应该允许用户开发一些X Window System和IBM的Presentation Manager(PM)系统中都可以使用的应用程序。运用继承机制,我们可以定义Window抽象类和它的两个子类Xwindow和PMWindow,由它们分别实现不同系统平台的Window界面。但是继承机制有两个不足之处:

客户在创建窗口应该不涉及到其具体实现部分,仅仅是窗口的实现部分依赖于应用运行的平台。这样客户代码在创建窗口就不应涉及到特定的平台。

Bridge 模式解决以上的方法是,将Window抽象和它的实现部分分别放在独立的类层次结构中。其中一个类层次结构针对窗口接口,另外一个独立的类层次结构针对平台相关的接口实现部分,这个类层次结构的根类为WindowImp。例如XWindowImp子类提供了一个基于XWindow系统的实现,如下图所示:


image.png

对Window子类的所有操作都是用WindowImp的接口中的抽象操作实现的,这就将窗口的抽象和系统平台相关的实现部分分离开来。因此,我们将Window与WindowImp之间的关系称之为桥接,因为它在抽象类与它的实现之间起到了桥梁作用,使它们可以独立地变化。

4. 适应性

以下情况使用Bright模式:

5 结构
image.png
6 参与者
7 协作
8 效果

Bridge模式有以下的一些优点:

9 实现

要注意的问题:

10 代码示例

github地址

上一篇 下一篇

猜你喜欢

热点阅读