Skip to content

桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与其实现部分分离,使得它们可以独立地变化。这种模式通过引入一个桥梁接口来连接抽象和实现,从而允许两者沿着各自的维度独立扩展。

桥接模式的主要角色

  1. Abstraction(抽象类):定义了控制客户端对实现部分的访问,并维护了一个对 Implementor 类型的引用。
  2. RefinedAbstraction(扩充抽象类):扩展了 Abstraction 定义的接口,通常会添加一些具体的功能。
  3. Implementor(实现类接口):定义了实现部分的基本操作,但并不强制要求所有方法都由子类实现。
  4. ConcreteImplementor(具体实现类):实现了 Implementor 接口并定义了具体的实现细节。

在 JavaScript 中的实现

下面是一个使用桥接模式的例子,展示如何在不修改抽象部分的情况下改变其实现:

示例:图形与颜色的桥接

javascript
// Implementor(实现类接口)
class Color {
  applyColor() {
    throw new Error("This method should be overridden");
  }
}

// ConcreteImplementor(具体实现类)
class RedColor extends Color {
  applyColor() {
    return "Red";
  }
}

class BlueColor extends Color {
  applyColor() {
    return "Blue";
  }
}

// Abstraction(抽象类)
class Shape {
  constructor(color) {
    this.color = color;
  }

  draw() {
    throw new Error("This method should be overridden");
  }
}

// RefinedAbstraction(扩充抽象类)
class CircleShape extends Shape {
  draw() {
    console.log(`Drawing a ${this.color.applyColor()} circle.`);
  }
}

class SquareShape extends Shape {
  draw() {
    console.log(`Drawing a ${this.color.applyColor()} square.`);
  }
}

// 使用示例
const redCircle = new CircleShape(new RedColor());
redCircle.draw(); // 输出: Drawing a Red circle.

const blueSquare = new SquareShape(new BlueColor());
blueSquare.draw(); // 输出: Drawing a Blue square.

代码解释

  • Implementor(实现类接口)Color 类定义了一个 applyColor 方法,这个方法将在具体实现中被覆盖以提供具体的颜色信息。
  • ConcreteImplementor(具体实现类)RedColorBlueColor 类分别实现了 Color 接口,提供了红色和蓝色的具体表示。
  • Abstraction(抽象类)Shape 类持有一个对 Color 对象的引用,并在其 draw 方法中使用该颜色对象。
  • RefinedAbstraction(扩充抽象类)CircleShapeSquareShape 类扩展了 Shape 类,并实现了具体的绘制逻辑,同时利用了传入的颜色对象。

应用场景

桥接模式适用于以下情况:

  • 当一个类存在两个或更多独立变化的维度,且需要独立扩展这些维度时。
  • 当不想在抽象和它的实现部分之间建立静态继承关系时。
  • 当需要跨越不同平台或技术栈进行开发时,桥接模式可以帮助你解耦高层应用逻辑与低层实现细节。

通过使用桥接模式,可以使系统更加灵活,能够适应不同的需求变化,同时保持良好的结构和清晰的设计。此外,它还支持动态地交换实现部分,这对于运行时环境下的灵活性至关重要。

Released under the MIT License.