14
Bridge – Design Pattern Rômulo Jales <[email protected]>

Bridge GoF Patern

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Bridge GoF Patern

Bridge – Design Pattern

Rômulo Jales <[email protected]>

Page 2: Bridge GoF Patern

O Que é?

v GoF pattern v Padrão Estrutural v Também conhecido por Handle / Body

18/09/13 @LES/PUC-Rio 2

Page 3: Bridge GoF Patern

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

Page 4: Bridge GoF Patern

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

Page 5: Bridge GoF Patern

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

Page 6: Bridge GoF Patern

Estrutura

18/09/13 @LES/PUC-Rio 6

http://oreboladodeturing.files.wordpress.com/2011/08/patternbridge1.jpg

Page 7: Bridge GoF Patern

Participantes

v Abstrações (bridge) v Implementação (classes concretas)

18/09/13 @LES/PUC-Rio 7

Page 8: Bridge GoF Patern

Colaborações

v A classe abstrata repassa a requisição para o implementador

18/09/13 @LES/PUC-Rio 8

Page 9: Bridge GoF Patern

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

Page 10: Bridge GoF Patern

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

Page 11: Bridge GoF Patern

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

Page 12: Bridge GoF Patern

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

Page 13: Bridge GoF Patern

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

Page 14: Bridge GoF Patern

Referências

v Design Patterns: Elements of Reusable Object-Oriented Software

18/09/13 @LES/PUC-Rio 14