Skip to main content

Bridge Pattern in JavaScript (Live Playground)

The Bridge pattern is a structural design pattern that decouples an abstraction from its implementation, allowing the two to vary independently. In this tutorial, we'll explore the Bridge pattern in JavaScript, including its use cases, implementation, and benefits.

Why Use the Bridge Pattern?

The Bridge pattern is useful when you want to:

  1. Decouple an abstraction from its implementation, allowing them to evolve independently.
  2. Create reusable and flexible code that is not tightly bound to specific implementations.
  3. Improve the extensibility and maintainability of your code.

Implementing the Bridge Pattern in JavaScript

Here's an example of how to implement the Bridge pattern using JavaScript classes:

TypeScript
// Abstraction
class Shape {
constructor(drawAPI) {
this.drawAPI = drawAPI;
}

draw() {
throw new Error('draw() method must be implemented in subclasses');
}
}

// Implementations
class DrawAPI {
drawCircle(radius, x, y) {
throw new Error('drawCircle() method must be implemented in subclasses');
}
}

class RedCircle extends DrawAPI {
drawCircle(radius, x, y) {
console.log(`Drawing a red circle with radius ${radius} at (${x}, ${y})`);
}
}

class GreenCircle extends DrawAPI {
drawCircle(radius, x, y) {
console.log(`Drawing a green circle with radius ${radius} at (${x}, ${y})`);
}
}

// Refined Abstraction
class Circle extends Shape {
constructor(drawAPI, radius, x, y) {
super(drawAPI);
this.radius = radius;
this.x = x;
this.y = y;
}

draw() {
this.drawAPI.drawCircle(this.radius, this.x, this.y);
}
}

const redCircle = new Circle(new RedCircle(), 10, 5, 7);
redCircle.draw(); // Output: Drawing a red circle with radius 10 at (5, 7)

const greenCircle = new Circle(new GreenCircle(), 8, 3, 4);
greenCircle.draw(); // Output: Drawing a green circle with radius 8 at (3, 4)

In this example, the Shape class represents the abstraction, and the DrawAPI class represents the implementation. The Circle class is a refined abstraction that inherits from the Shape class and uses an instance of a DrawAPI subclass to perform the actual drawing. The RedCircle and GreenCircle classes are concrete implementations of the DrawAPI class.

Live Playground, Try it Yourself

Benefits of the Bridge Pattern

Implementing the Bridge pattern in your JavaScript projects offers several benefits:

  1. Decoupling: The Bridge pattern decouples an abstraction from its implementation, allowing them to evolve independently and reducing the risk of tight coupling.
  2. Flexibility: The Bridge pattern enables you to create reusable and flexible code that is not tightly bound to specific implementations, making it easier to adapt your code to changing requirements.
  3. Extensibility: The Bridge pattern promotes extensibility by separating the concerns of the abstraction and the implementation, making it easier to add new features or modify existing ones.

Conclusion

In summary, the Bridge pattern is a valuable tool in JavaScript development that can help you create flexible, decoupled, and extensible code. By understanding and implementing this pattern, you can enhance your web development skills and create more robust applications.