Design Patterns
Elisabeth Suescún
Leandra Mara da Silva
Motivação
• Motivação
– Aprimorar conhecimentos de Projeto de Sistemas de
Software, realizando um estudo sobre os Padrões de Projeto
apresentados em [GoF].
• Objetivo
– Fornecer uma visão geral sobre o padrão Bridge.
© LES/PUC-Rio
Padrão Bridge (Handle/Body)
Bridge
• Classificação
– Estrutural de Objeto
• Propósito
– Desacoplar uma abstração de sua implementação para que
ambos possam variar independentemente
© LES/PUC-Rio
Bridge
• Motivação (O Problema)
– Imagine um sistema gráfico de janelas que deve ser portável para
diversas plataformas.
– Normalmente, a portabilidade seria obtida criando-se especializações
dos tipos de janelas para cada uma das plataformas suportadas.
© LES/PUC-Rio
Bridge
• Motivação (continuação)
– Observa-se pelo diagrama anterior que: Para cada tipo de
janela, devem ser definidas tantas classes quanto forem o nº
de plataformas
– O que acontece com a adição de uma nova plataforma?
– E de outro tipo de janela?
– E se forem vários os tipos de janelas e plataformas?
Resultado:
Proliferação de classes
© LES/PUC-Rio
Bridge
• Motivação (A Solução)
Exemplo de solução:
– O padrão Bridge permite colocar as abstrações e suas
implementações em diferentes hierarquias de classes, e
permite que variem de forma independente
– São criadas duas hierarquias de classes relacionadas: a
hierarquia de tipos de janelas e a de implementação nas
plataformas suportadas. O relacionamento entre as interfaces é
a ponte que desacopla a interface da implementação
– O diagrama do próximo slide mostra a solução citada
© LES/PUC-Rio
Bridge
• Motivação
© LES/PUC-Rio
Bridge
• Aplicabilidade (use o padrão quando:)
– Desejar evitar ligação permanente entre uma abstração e sua
implementação. Pode ser, por exemplo, quando se deseja variar a
implementação em tempo de execução (runtime)
– Tanto a abstração quanto a implementação devem ser extensíveis
através de herança
– Mudanças na implementação de uma abstração não devem ter impacto
sobre o cliente
– Você tem uma proliferação de classes, e quer evitá-las dividindo o
objeto em duas partes
– Você quer compartilhar uma implementação entre múltiplos objetos e
este fato deve ser escondido do cliente.
© LES/PUC-Rio
Bridge
• Estrutura
© LES/PUC-Rio
Bridge
• Participantes
– Abstraction (Window)
• Define a interface da abstração
• Mantém uma referência para um objeto do tipo Implementor
– RefinedAbstraction (IconWindow)
• Estende a interface definida por Abstraction
– Implementor (WindowImp)
• Define a interface para as classes de implementação
• Não precisa corresponder exatamente à interface de Abstraction
– ConcreteImplementor (XwindowImp, PMWindowImp)
• Implementa a interface de Implementor e define sua
implementação concreta
© LES/PUC-Rio
Bridge
• Colaborações
– Abstraction repassa as solicitações dos clientes para o seu
objeto Implementor
© LES/PUC-Rio
Bridge
• Conseqüências
– Implementação de abstração pode ser configurada em tempo
de execução
– Mudanças de uma implementação não torna necessário a
recompilação da classe Abstraction e seus clientes.
– Melhorias na estrutura do sistema, encorajando o uso o de
camadas; a parte de alto nível somente tem que ter
conhecimento de Abstraction e Implementor
– Extensibilidade melhorada: pode-se estender as hierarquias de
Abstraction e Implementor independentemente
– Ocultação de detalhes de implementação dos clientes
© LES/PUC-Rio
Bridge
© LES/PUC-Rio
Bridge
© LES/PUC-Rio
Bridge
© LES/PUC-Rio
Bridge
© LES/PUC-Rio
Bridge
© LES/PUC-Rio
Bridge
© LES/PUC-Rio
Fim!!
Download

Slides