Padrão Bridge - Um exemplo mais simples de entender...  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
VictorAJ
Thread.start()
[Avatar]

Membro desde: 20/05/2009 14:54:07
Mensagens: 38
Offline

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...

Desde já, agradeço!

VictorAJ
Thread.start()
[Avatar]

Membro desde: 20/05/2009 14:54:07
Mensagens: 38
Offline

Pessoal,

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.

Grato desde já.
 Nome do arquivo bridge.zip [Disk] Download
 Descrição
 Tamanho 2 Kbytes
 Baixado:  149 vez(es)

VictorAJ
Thread.start()
[Avatar]

Membro desde: 20/05/2009 14:54:07
Mensagens: 38
Offline

Caraca, ninguém!?
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline



Pergunto: Por que eu iria querer usar o Bridge!?


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.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
VictorAJ
Thread.start()
[Avatar]

Membro desde: 20/05/2009 14:54:07
Mensagens: 38
Offline

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.
steveo
Debugger
[Avatar]

Membro desde: 31/08/2003 00:08:00
Mensagens: 57
Localização: Salvador Bahia
Offline

VictorAJ wrote: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.


aqui pode encontrar mais:

http://www.oodesign.com/bridge-pattern.html

--
Todo mundo tem cliente,só analista de sistemas e traficante que tem usuário.
[MSN]
deniswsrosa
GUJ Ranger
[Avatar]

Membro desde: 21/07/2005 08:51:27
Mensagens: 807
Offline

Bridge como o próprio nome diz é uma "ponte".

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.

Foi o suficiente?

SCJP, SCEA I
[MSN]
VictorAJ
Thread.start()
[Avatar]

Membro desde: 20/05/2009 14:54:07
Mensagens: 38
Offline

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.

Valeu!
deniswsrosa
GUJ Ranger
[Avatar]

Membro desde: 21/07/2005 08:51:27
Mensagens: 807
Offline

Cara, desculpa não parar pra ler o seu código (sem tempo), mas quando eu estava estudando pro SCEA o melhor exemplo que encontrei foi o da Wikipedia.

http://en.wikipedia.org/wiki/Bridge_pattern

Olha lá que tem o bridge implementado em java, ruby e scala. Ai basta bater com o seu código e ver se vc está fazendo a mesma coisa.

Abracos!

SCJP, SCEA I
[MSN]
VictorAJ
Thread.start()
[Avatar]

Membro desde: 20/05/2009 14:54:07
Mensagens: 38
Offline

Valeu Denis!
 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team