桥接模式

模式描述

将抽象部分与实现部分分离,使之可以独立变化。换句话说,当一个类存在两个(或多个)独立变化的维度,通过组合的方式让这两个(或多个)维度可以独立进行扩展。

优点

  1. 分离抽象和实现;
  2. 提高扩展性;
  3. 实现细节对 Client 透明

缺点

应用场景

  1. 不希望抽象和实现有绑定关系;
  2. 类的抽象以及实现可以通过生成子类的方式进行扩充;
DATE CHANGELOG
2023年5月9日 初始化

UML 类图

classDiagram

class Abstraction {
	<<interface>>
	operation()
}

class RefinedAbstraction {
	operation()
}
Abstraction <|.. RefinedAbstraction

class Implementor {
	<<interface>>
	operationImp()
}

class ConcreteImplementorA {
	operationImp()
}

class ConcreteImplementorA {
	operationImp()
}
Implementor <|.. ConcreteImplementorA
Implementor <|.. ConcreteImplementorB

Abstraction o.. Implementor
Abstraction <-- Client

参与者

Abstraction

  • 定义抽象类的接口;
  • 维护一个指向 Implementor 的指针;

RefinedAbstraction

  • 扩展 Abstraction 的接口;

Implementor

  • 定义实现类的接口。该接口不一定与 Abstraction 完全一致;
  • Implementor 接口仅提供基本操作,而 Abstraction 则定义了基于这些基本操作较高层次的操作;

ConcreteImplementor

  • Implementor 的实现;

Client 类

客户端。

数据流

  1. Client 通过调用 Abstraction 中的接口来操作;
  2. Abstraction 的实现委托给 ConcreteImplementor 来进行;

相关模式

  • 抽象工厂:用来创建和配置一个特定的桥接模式;
  • 适配器模式:通常在系统设计完成后使用,桥接模式则在系统开始时就被使用。

补充

  • ”抽象“并非是抽象类或接口,而是一组行为,真正的业务实现委托给”实现“来完成;

示例代码

golang

java