Bridge – Design Pattern
Rômulo Jales <[email protected]>
O Que é?
v GoF pattern v Padrão Estrutural v Também conhecido por Handle / Body
18/09/13 @LES/PUC-Rio 2
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
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
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
Estrutura
18/09/13 @LES/PUC-Rio 6
http://oreboladodeturing.files.wordpress.com/2011/08/patternbridge1.jpg
Participantes
v Abstrações (bridge) v Implementação (classes concretas)
18/09/13 @LES/PUC-Rio 7
Colaborações
v A classe abstrata repassa a requisição para o implementador
18/09/13 @LES/PUC-Rio 8
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
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
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
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
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
Referências
v Design Patterns: Elements of Reusable Object-Oriented Software
18/09/13 @LES/PUC-Rio 14
Top Related