SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Bridge – Design Pattern
Rômulo Jales
<romulo@romulojales.com>
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

Mais conteúdo relacionado

Mais de Rômulo Jales

Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasConhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasRômulo Jales
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
Introdução a Model Based User Interface Design
Introdução a Model Based User Interface DesignIntrodução a Model Based User Interface Design
Introdução a Model Based User Interface DesignRômulo Jales
 
Usando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosUsando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosRômulo Jales
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
DKMS ­ Dynamic Kernel Module Support
DKMS ­ Dynamic Kernel Module SupportDKMS ­ Dynamic Kernel Module Support
DKMS ­ Dynamic Kernel Module SupportRômulo Jales
 
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...Rômulo Jales
 
Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Rômulo Jales
 

Mais de Rômulo Jales (10)

Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasConhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
Introdução a Model Based User Interface Design
Introdução a Model Based User Interface DesignIntrodução a Model Based User Interface Design
Introdução a Model Based User Interface Design
 
Usando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosUsando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuários
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Implementação de
Implementação de Implementação de
Implementação de
 
Seminario pic
Seminario picSeminario pic
Seminario pic
 
DKMS ­ Dynamic Kernel Module Support
DKMS ­ Dynamic Kernel Module SupportDKMS ­ Dynamic Kernel Module Support
DKMS ­ Dynamic Kernel Module Support
 
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
 
Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+
 

Padrão Bridge explicado