结构型设计模式: 桥接模式(Bridge Pattern)

结构型设计模式: 桥接模式(Bridge Pattern)

CSDN专栏: 设计模式(UML/23种模式)

桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离,使它们都可以独立地变化。

桥接模式(Bridge Pattern)属于结构型模式。结构型模式涉及到如何组合类和对象以获得更大的结构;结构型类模式采用继承机制来组合接口或实现。结构型模式主要包括:Adapter模式、Bridge模式、Composite模式、Decorator模式、Facade模式、Flyweight模式和Proxy模式。结构型类模式在某种程度上具有相关性。

模式简介

GOF的《设计模式》指出Bridge模式的意图是:
Bridge模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。

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

Bridge模式适用于以下场景:

  • 在抽象类和实现类之间不限定绑定关系,由调用模块决定确定的绑定关系;
  • 抽象类和实现类均可通过子类加以扩展,Bridge模式可以对抽象接口和实现部分进行组合,并分别对它们进行扩充;
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译;
  • 你想对客户完全隐藏抽象的实现部分。在 C++中,类的表示在类接口中是可见的;
  • 你想在多个对象间共享实现(可能使用引用计数),并且对客户隐藏该细节;

模式图解

Bridge模式的UML示例如下:

《结构型设计模式: 桥接模式(Bridge Pattern)》

Bridge模式的工作过程如下:

  • Abstraction类定义抽象类的接口并维护一个指向Implementor类型对象的指针。
  • RefinedAbstraction类扩充由Abstraction定义的接口。
  • Implementor类定义实现类的接口,该接口可以不与Abstraction类的接口完全一致。Implementor提供基本操作,而Abstraction提供更高层次的操作。
  • ConcreteImplementor类实现Implementor接口并定义它的具体实现。
  • Abstraction将Clinet的请求转发给Implementor对象。

Bridge模式的有益效果如下:

  • 支持接口定义和接口实现分离;并且接口实现动态绑定接口上(可配置可切换)。
  • 支持单独对Abstraction和Implementor层次结构进行扩展。
  • 实现细节对客户透明 你可以对客户隐藏实现细节,诸如共享Implementor对象以及相应的引用计数机制。

Abstract Factory 模式可以用来创建和配置一个特定的Bridge模式。Adapter模式用来帮助无关的类协同工作,它通常在系统设计完成后才会被使用。然而,Bridge模式则是在系统开始时就被使用,它使得抽象接口和实现部分可以独立进行改变。

模式实例

Coplien的String类[COP92],这个类中中多个对象可以共享同一个字符串表示(StringRep)。

  • ${android_sdk_root}/frameworks/base/core/java/android/os/FileBridge.java

系列文章

  • CSDN专栏: 设计模式(UML/23种模式)
  • Github专栏: 设计模式(UML/23种模式)

参考文献

  • GOF的设计模式:可复用面向对象软件的基础
  • 设计模式之禅
  • 图说设计模式
    原文作者:设计模式
    原文地址: https://blog.csdn.net/shareviews/article/details/82709807
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞