DEV Community

Nhan Nguyen
Nhan Nguyen

Posted on

JavaScript Design Patterns - Structural - Bridge

Image description

The bridge pattern allows one interface in our class to build different implementations depending on what instance we are receiving and what instance we need to return.

In the example below, we create a bridge between types of Soldiers and types of Weapons. In this way, we can correctly pass the instance of weapons to our soldiers.

class Soldier {
  constructor(weapon) {
    this.weapon = weapon;
  }
}

class SuperSoldier extends Soldier {
  constructor(weapon) {
    super(weapon);
  }

  attack() {
    return 'SuperSoldier, Weapon: ' + this.weapon.get();
  }
}

class IronMan extends Soldier {
  constructor(weapon) {
    super(weapon);
  }

  attack() {
    return 'Ironman, Weapon: ' + this.weapon.get();
  }
}

class Weapon {
  constructor(type) {
    this.type = type;
  }

  get() {
    return this.type;
  }
}

class Shield extends Weapon {
  constructor() {
    super('shield');
  }
}

class Rocket extends Weapon {
  constructor() {
    super('rocket');
  }
}

export { SuperSoldier, IronMan, Shield, Rocket };
Enter fullscreen mode Exit fullscreen mode

šŸ‘‰ Use this pattern when we need to use a specific implementation in runtime from an abstraction.

šŸš€ A complete example here: https://stackblitz.com/edit/vitejs-vite-efyrjy?file=main.js


I hope you found it useful. Thanks for reading. šŸ™

Let's get connected! You can find me on:

Top comments (2)

Collapse
 
artydev profile image
artydev

Thank you :-)

Collapse
 
nhannguyendevjs profile image
Nhan Nguyen

You are welcome šŸ˜‹