O propósito do padrão Bridge é desacoplar uma abstração de sua implementação, de modo que as duas possam variar independentemente.
Os participantes do padrão são:
- Abstraction
- RefinedAbstraction
- Implementor
- ConcreteImplementor
Eu entendo perfeitamente que podemos “projetar” abstração e implementação independentemente, porque o padrão evita que eles estejam fortemente acoplados.
No entanto, estou tendo dificuldades para entender como a abstração pode variar. Considerando que as diversas RefinedAbstraction são extensões de Abstraction, ou seja, sua interface possui métodos diferentes da interface comum, em que sentido as abstrações podem variar???
Por exemplo, considere o código abaixo:
public static void main(String[] args) {
Abstraction r = new RefinedAbstraction(new ConcreteImplementor);
// mas agora, e se eu quisesse usar os métodos específicos de //RefinedAbstraction?
// Eu teria que trabalhar com o tipo concreto (ou fazer casts)
RefinedAbstraction r = new RefinedAbstraction(new ConcreteImplementor);
r.specificMethod();
}
Mas se eu trabalhar diretamente com o tipo concreto, então eu não poderia variar as abstrações. Estou chegando a conclusão de que não é esse o nível de variação que o padrão propõe, e sim, que eu possa ter diversas abstrações independente de implementações, mas na ora de usar eu codifico considerando UMA abstração particular. Seria isso???
Obrigado
