Pessoal, estou estudando Design Patterns, e estava indo bem, até encontrar o padrão Bridge. Eu até entendi o porquê dele existir, só não vejo o porquê de usa-lo, logo, concluo que eu não entendi o espírito da coisa. Eu procurei aqui no fórum, mas a maioria dos exemplos é usando como exemplos as classes AWT ou implementações de Drivers JDBC. Sinceramente acho que esses tipos de exemplos pouco ajudam. Sempre tento pegar exemplos o mais próximo possível do mundo real, pois ajuda muito atender (por exemplo, o padrão Adapter, só consegui mesmo entender, quando comecei a pensar em como seria um adaptador de um câmbio automático para um câmbio de cinco marchas). Então, pergunto: alguém aqui tem algum exemplo de padrão Bridge, sem ser JDBC, AWT, ou qualquer outra coisa que não temos no mundo real? Eu até tentei usar como exemplo a implementação de um motor (sempre carros! rs!), pensei no seguinte:
Eu tenho um classe abstrata chamada MOTOR. Eu posso ligar um motor, acelerar e desligar. Ou seja, eu teria:
Motor
ligar()
acelerar()
desligar()
Blz. Aí vamos supor que agora eu tenha que ter dois tipos de motores concretos: um motor elétrico (MotorEletrico) e um motor a explosão (MotorExplosao). Vamos supor que o comportamento de ligar, acelerar e desligar desses motores sejam totalmente diferentes um do outro. Ora, eu consigo resolver isso facilmente com herança. Faço MotorEletrico e MotorExplosao herdar da classe Motor e um abraço! Implemento os métodos de cada motor.
Pergunto: Por que eu iria querer usar o Bridge!?
Quem souber me explicar, pois realmente, eu não tô conseguindo entender a utilidade disso ainda…
Acho que finalmente consegui entender e implementar o padrão no exemplo que dei acima. Alguém poderia corrigir?
Entendi também o porquê desse padrão: como a implementação da classe fica por conta de outra classe, eu poderia alterar o comportamento com muito mais facilidade, sem ter que afetar minhas classes ancestrais… bom, acho que é isso.
Gostaria que alguém desse uma olhadinha nos arquivos em anexo, e verificasse, pra ver se eu implementei certo.
O padrão responde a isso. Se vc não sabe a resposta isto vc não entendeu o padrão.
A primeira linha do padrão explica porque usar : desacoplar contrato de implementação tal que ambos possam evoluir em separado.
Sim, Sérgio, eu entendi sim. Veja meu segundo post. Até me atrevi a implementar o padrão. Queria saber se está certo o que fiz. Você poderia corrigi-lo? Grato.
Imagine a ponte Rio-Niteroi, ela liga lógicamente a cidade do Rio com Niterói.
Ambas as cidades podem derrubar construcoes, criar novas, alterar ruas e etc. Porém a ponte sempre vai estar lá pra levar o pessoal do Rio pra Niterói e de Niterói pro Rio. Não poderia existir nome melhor pra esse patern, pois é exatamente isso que ele faz, no caso do JDBC por exemplo, tanto os provedores de drivers quando a implementação do JDBC podem evoluir sem deixar de se comunicarem.
Steveo, valeu pelo link. Aqui no meu trabalho é bloqueado, mas chegando em casa vou dar uma olhada.
Denis, obrigado por responder. O conceito do padrão eu entendi, veja no meu segundo post. Eu gostaria que alguém desse uma olhada no código que escrevi, implementando o padrão (está em anexo, no segundo post). Porque, uma coisa é entender o conceito, outra é implementa-lo “sem colar” de exemplos já prontos. E foi exatamente o que tentei fazer.