Design Patterns
Padrão Bridge (Handle/Body)
Paulo Roberto França
Motivação
• Visualizador de imagens. (Diferentes
formatos)
• Cada sistema operacional exibe a imagem
de uma forma diferente.
• È inconveniente a extensão da abstração
imagem para diferentes formatos em
diferentes plataformas.
© LES/PUC-Rio
Motivação
Resultado:
Proliferação de classes
© LES/PUC-Rio
Motivação
– Formato de uma imagem (estrutura e representação)
– A forma como a imagem é exibida varia entre
Sistemas operacionais, porém a sua estrutura é a
mesma.
– Windows pode mostrar uma imagem (bitmap) sem
conhecimento de seu formato original (BMP, JPG
etc...)
– A representação e a estrutura de um formato de
imagem são aspectos diferentes.
– Devem variar de forma independente de acordo com
fatores como: Sistema operacional, hardware etc..
© LES/PUC-Rio
Motivação
•
A Solução
– O padrão Bridge permite diferentes hierarquias de
classes para as abstrações e suas implementações.
– Podem Variar de forma independente
– São criadas duas hierarquias de classes
relacionadas: a hierarquia de estrutura do formato de
imagens e a de representação nas plataformas
suportadas.
– O relacionamento entre as interfaces é a ponte que
desacopla a interface da implementação
© LES/PUC-Rio
Motivação
© LES/PUC-Rio
Bridge
• Classificação
– Estrutural de Objeto
• Propósito
– Permitir o desacoplamento de uma abstração de sua
implementação
– Assim ambos podem variar de forma independente
© LES/PUC-Rio
Aplicabilidade
– Evitar vínculo permanente entre abstração e implementação
– Selecionar ou trocar a implementação dinamicamente
– Abstração e implementação devem ser extensíveis
– Cliente não deve ser recompilado no caso de mudanças na
implementação.
– Ocultar a implementação (C++, header apenas da abstração)
– Evitar proliferação de classes
– Ocultar do cliente o compartilhamento da implementação entre
vários objetos. EX: objetos compartilham a mesma
representação de uma string.
© LES/PUC-Rio
Estrutura e participantes
© LES/PUC-Rio
Colaborações
– Existe uma “ponte” entre a abstração e a
implementação.
– Abstraction repassa as solicitações dos
clientes para o seu objeto Implementor
© LES/PUC-Rio
Consequências
– Configurar a implementação em tempo de execução
– Mudanças na implementação não torna implicam
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: pode-se estender as hierarquias de
Abstraction e Implementor independentemente
– Detalhes de implementação são ocultados do cliente
© LES/PUC-Rio
Implementação
•Diagrama de Classe
© LES/PUC-Rio
Implementação
•Diagrama de Sequência
© LES/PUC-Rio
Implementação
© LES/PUC-Rio
Implementação
© LES/PUC-Rio
Implementação
© LES/PUC-Rio
Implementação
© LES/PUC-Rio
Implementação
© LES/PUC-Rio
Pradrões Relacionados
• Abstract Factory
– Criar e configurar uma bridge
• Adapter
– Usado em sistema já projetados
– Bridge é usado no projeto desde o inicio
© LES/PUC-Rio
FIM
Download

Slides - (LES) da PUC-Rio