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