Bridge GoF Patern

387 visualizações

Publicada em

Apresentação sobre o parttern bridge para a disciplina da pós-graduação da PUC - Projeto de Sistema de Software.

Além da especificação do pattern tem um exemplo em python do padrão.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
387
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Bridge GoF Patern

  1. 1. Bridge – Design Pattern Rômulo Jales <romulo@romulojales.com>
  2. 2. O Que é? v GoF pattern v Padrão Estrutural v Também conhecido por Handle / Body 18/09/13 @LES/PUC-Rio 2
  3. 3. Propósito v Define uma estrutura independente da implementação para limitar o acoplamento. Não use subclasses a não ser para fazer coisas diferentes! 18/09/13 @LES/PUC-Rio 3
  4. 4. Motivação v Uso herança tende a tornar as coisas mais difíceis. v Separar a implementação da abstração. 18/09/13 @LES/PUC-Rio 4
  5. 5. Aplicação v Evita um vinculo permanente v Abstrações e implementações extensíveis por subclasses v Mudanças não devem ter impactos nos clientes v Proliferação de classes v Compartilhar a implementação entre objetos 18/09/13 @LES/PUC-Rio 5
  6. 6. Estrutura 18/09/13 @LES/PUC-Rio 6 http://oreboladodeturing.files.wordpress.com/2011/08/patternbridge1.jpg
  7. 7. Participantes v Abstrações (bridge) v Implementação (classes concretas) 18/09/13 @LES/PUC-Rio 7
  8. 8. Colaborações v A classe abstrata repassa a requisição para o implementador 18/09/13 @LES/PUC-Rio 8
  9. 9. Consequências v Desacopla a interface v Melhora a extensibilidade v Esconde detalhes de implementação do cliente 18/09/13 @LES/PUC-Rio 9
  10. 10. Exemplo class Abstrata(object): def funcao_abs(self, arg): print arg def funcao_repassada_ao_bridge(self, arg): ponto = self.get_ponte(arg) ponto.funcao_assumida(arg) def get_ponte(self, arg): if type(arg) == str: return ImplementadorSTR() elif type(arg) == int: return ImplementadorINT() 18/09/13 @LES/PUC-Rio 10
  11. 11. class Ponte(object): def funcao_assumida(self, arg): raise NotImplemented class ImplementadorSTR(Ponte): def funcao_assumida(self, arg): print "oi sou uma string: " + arg class ImplementadorINT(Ponte): def funcao_assumida(self, arg): print "oi sou um inteiro: " + arg 18/09/13 @LES/PUC-Rio 11
  12. 12. class ClasseCliente(Abstrata): def minha_funcao(self): return "Oi sou do cliente" c = ClasseCliente() print c.minha_funcao() print c.funcao_abs(123) print c.funcao_repassada_ao_bridge(1) print c.funcao_repassada_ao_bridge("1") 18/09/13 @LES/PUC-Rio 12
  13. 13. Exemplo (mais prático...) v Classe models do Django v Abstrai a persistência em banco v Evoca os implementadores para realizar comunicação com banco v A classe sabe quem evocar v Cliente não sabe como é feita as operações 18/09/13 @LES/PUC-Rio 13
  14. 14. Referências v Design Patterns: Elements of Reusable Object-Oriented Software 18/09/13 @LES/PUC-Rio 14

×