Achei um pouco estranho a explicação sobre a Bridge, pois tinha como idéia que normalmente existem algumas implementações e cada implementação usa diferentes outras implementações que também variam de forma independente. E esse padrão servia para desacoplar uma da outra.
Ex:
package br.com.schimidtsolutions.estudo.bridge;
public interface Telefone {
public void ligar();
public void enviarSms();
}
package br.com.schimidtsolutions.estudo.bridge;
public class IPhone implements Telefone {
private final Operadora operadora;
public IPhone(final Operadora operadora) {
this.operadora = operadora;
}
@Override
public void ligar() {
// Outras Logicas do telefone
operadora.fazerLigacao();
}
@Override
public void enviarSms() {
// Outras Logicas do telefone
operadora.enviarSms();
}
}
package br.com.schimidtsolutions.estudo.bridge;
public class SansungGalaxy implements Telefone {
private final Operadora operadora;
public SansungGalaxy(final Operadora operadora) {
this.operadora = operadora;
}
@Override
public void ligar() {
// Outras Logicas do telefone
operadora.fazerLigacao();
}
@Override
public void enviarSms() {
// Outras Logicas do telefone
operadora.enviarSms();
}
}
package br.com.schimidtsolutions.estudo.bridge;
public interface Operadora {
public void fazerLigacao();
public void enviarSms();
}
package br.com.schimidtsolutions.estudo.bridge;
public class Claro implements Operadora {
@Override
public void fazerLigacao() {
System.out.println("Claro ligando...");
}
@Override
public void enviarSms() {
System.out.println("Claro enviando SMS...");
}
}
package br.com.schimidtsolutions.estudo.bridge;
public class Vivo implements Operadora {
@Override
public void fazerLigacao() {
System.out.println("Vivo ligando...");
}
@Override
public void enviarSms() {
System.out.println("Vivo enviando SMS...");
}
}