Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouWilliam Castilhos Lacerda Alterado mais de 8 anos atrás
1
Padrão Bridge Projeto de Sistemas de Software(PSS) Marcio D. M. Santos
2
Propósito Desacoplar a Abstração da Implementação © LES/PUC-Rio
3
Motivação Algumas vezes uma abstração pode ter várias implementações; Permitir que um programa rode em outra plataforma;
4
Aplicabilidade Deseja-se evitar acoplamento permanente entre a abstração e a implementação. Comumente usando em sistemas web –Cliente > Facade(Abstração)> Dao(Implementação) © LES/PUC-Rio
5
Aplicabilidade Softwares com múltiplas apresentações –Interface Texto –Interface Gráfica Exemplo –YAST –Borland C++
6
Estrutura © LES/PUC-Rio
7
Participantes Abstraction –Define a interface da abstração –Mantém uma referência para a implementação RefinedAbstraction –Estende a abstração Implementor –Define a interface para a implementação, que não possui nenhuma relação com a abstração ConcreteImplementor –Define a implementação © LES/PUC-Rio
8
Colaborações © LES/PUC-Rio A abstração invoca os métodos da interface da implementação
9
Conseqüências Desacoplamento entre a Abstração e a Implementação Melhora a extensibilidade Esconde detalhes de implementação do cliente © LES/PUC-Rio
10
Paterns relacionados Adapter Abstract Factory © LES/PUC-Rio
11
Exemplo /** "Implementor" */ interface DrawingAPI { public void drawCircle(double x, double y, double radius); } © LES/PUC-Rio
12
Exemplo /** "ConcreteImplementor" 1/2 */ class DrawingAPI1 implements DrawingAPI { public void drawCircle(double x, double y, double radius) { System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius); } © LES/PUC-Rio
13
Exemplo class DrawingAPI2 implements DrawingAPI { public void drawCircle(double x, double y, double radius) { System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius); } © LES/PUC-Rio
14
Exemplo /** "Abstraction" */ interface Shape { public void draw(); // low-level public void resizeByPercentage(double pct); // high-level } © LES/PUC-Rio
15
Exemplo /** "Refined Abstraction" */ class CircleShape implements Shape { private double x, y, radius; private DrawingAPI drawingAPI; public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI) { this.x = x; this.y = y; this.radius = radius; this.drawingAPI = drawingAPI; } // low-level i.e. Implementation specific public void draw() { drawingAPI.drawCircle(x, y, radius); } // high-level i.e. Abstraction specific public void resizeByPercentage(double pct) { radius *= pct; } } © LES/PUC-Rio
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.