DEV Community

Determinado 96
Determinado 96

Posted on

Um resumo sobre o padrão de projeto Bridge

Analogia

Imagine que você tem:

  • vários tipos de controle remoto
  • várias marcas de TV

O controle funciona
A TV funciona
Mas você não quer criar um controle diferente pra cada TV…

O que você faz? Você cria uma conexão entre eles onde:

o controle diz o que fazer
a TV sabe como fazer

Isso é o Bridge.

Ele separa duas coisas que cresceriam juntas (e virariam um caos) em duas partes independentes.

O que o bridge resolve?

Evite isso:

ControleSamsung
ControleLg
ControleSony
ControleAvancadoSamsung
ControleAvancadoLg
...
Enter fullscreen mode Exit fullscreen mode

Ideia central

Separar abstração (o que eu faço) e implementação (como eu faço).

Exemplo

// Implementação: como eu faço isso (TVs)
class TV {
  ligar() {}
}

class SamsungTV extends TV {
  ligar() {
    console.log("Ligando TV Samsung");
  }
}

class LgTV extends TV {
  ligar() {
    console.log("Ligando TV LG");
  }
}

// Abstração: o que eu quero fazer (controle remoto)
class ControleRemoto {
  constructor(tv) {
    // Composição: o controle remoto tem uma TV
    this.tv = tv;
  }

  ligar() {
    this.tv.ligar();
  }
}

class ControleAvancado extends ControleRemoto {
  netflix() {
    console.log("Abrindo Netflix");
  }
}

const samsung = new SamsungTV();
const lg = new LgTV();

const controle1 = new ControleRemoto(samsung);
controle1.ligar(); 
// Ligando TV Samsung

const controle2 = new ControleAvancado(lg);
controle2.ligar(); 
// Ligando TV LG

controle2.netflix();
// Abrindo Netflix
Enter fullscreen mode Exit fullscreen mode

Top comments (0)