1 padrões de projeto prof. maria augusta vieira nelson puc minas prof. torsten paul nelson
TRANSCRIPT
![Page 1: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/1.jpg)
1
Padrões de Projeto
Prof. Maria Augusta Vieira Nelson PUC Minas
Prof. Torsten Paul Nelson
![Page 2: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/2.jpg)
2
Bibliografia
LARMAN, Graig. Utilizando UML e Padroes:Uma introdução a análise e ao projeto orientados a objetos. Porto Alegre: Bookman, 2a Edição, 2004. capítulo 23
Gamma; Helm; Johnson; Vlissides. Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos. Bookman, 2000
![Page 3: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/3.jpg)
3
Nomenclatura
O termo “pattern” tem várias traduções: padrão
mas “padrão” também é a tradução de “standard” molde
bem mais apropriado, mas não usado na literatura
O termo “design” também tem várias traduções projeto
mas “projeto” também é tradução de “project” desenho
feio mas usado.
![Page 4: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/4.jpg)
4
Padrões de projeto
O livro “Design Patterns” (1995) aplicou os conceitos introduzidos por Alexander na Arquitetura civil ao projeto de software mais especificamente,
projeto orientado a objetos Um dos mais
importantes avanços da engenharia de software da década de 90.
![Page 5: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/5.jpg)
5
O que é um padrão de projeto?
Há muitas formas de ver: Uma solução para um pequeno problema de
design OO Um conjunto de relacionamentos entre
classes que se considera ter boas qualidades Descrições nomeadas de boas heurísticas de
design OO Um idioma para se falar sobre designs OO Soluções para deficiências do paradigma OO,
sem inventar novas abstrações
![Page 6: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/6.jpg)
6
DANGER!
Padrões de projeto tornam o código mais flexível nem sempre isso é uma boa coisa evite tornar flexível o que não precisa ser flexível hoje.
Padrões de projeto tornam o código menos legível Muitas partes do código escrito não são relacionadas com o
problema sendo resolvido O número de classes aumenta Os relacionamentos entre classes se tornam mais complexos
Não é pra ser “programação orientada a padrões” o aprendiz usa padrões em tudo para aprender como usá-
los; o graduado usa padrões apenas onde são necessários; o mestre não usa padrões; os padrões surgem naturalmente
em seu código.
![Page 7: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/7.jpg)
7
Três categorias
Padrões de criação maneiras comuns de se instanciar objetos
Padrões estruturais maneiras comuns de se organizar classes e
interfaces
Padrões comportamentais maneiras comuns nas quais objetos
interagem
![Page 8: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/8.jpg)
8
Padrões de criação
Factory Method Abstract Factory Builder Prototype Singleton
![Page 9: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/9.jpg)
9
Padrões de criação
Abstraem o processo de instanciação Ajudam a tornar o sistema independente
de como objetos são criados Encapsulam conhecimento sobre quais
classes concretas o sistema usa Esconde como instâncias dessas classes
são criadas
![Page 10: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/10.jpg)
10
Factory Method Intenção
Definir uma interface para criar um objeto, mas deixar que as subclasses decidam qual classe deve ser instanciada. Permitir que uma classe delegue a instanciação às suas subclasses.
Motivação Suponha que você esteja construindo uma aplicação para uma
locadora de vídeo que também vende fitas. Como acrescentar uma nova fita à locadora?
Store
AddTape( )
Tape
RentalTape SaleTape
![Page 11: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/11.jpg)
11
Factory Method - Estrutura
product = FactoryMethod( )
Creator
FactoryMethod( )AddObject( )
ConcreteCreator
FactoryMethod( )
ConcreteProduct
Product
return new ConcreteProduct
![Page 12: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/12.jpg)
12
Factory Method - Exemplo
tape = CreateTape( )
Store
CreateTape( )AddTape( )
RentalStore
CreateTape( )
RentalTape
Tape
return new RentalTape
![Page 13: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/13.jpg)
13
Factory Method - Aplicabilidade
Use o padrão Factory Method para criar instâncias quando você não sabe de
antemão a qual classe as instâncias vão pertencer
permitir que uma classe deixe suas subclasses decidirem quais objetos vão criar
![Page 14: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/14.jpg)
14
Factory Method - Consequências
Provê “ganchos” para subclassesMais flexível do que criar objetos
diretamenteConecta hierarquias de classes
paralelaspor exemplo, "RentalStore“ (locadora)
a "RentalTape" e "SaleStore" (vendedora) a "SaleTape"
![Page 15: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/15.jpg)
15
Singleton
static Instance( )SingletonOperation( )GetSingletonData( )
static uniqueInstancesingletonData
Singleton
Intenção Garantir que uma classe tenha apenas uma instância
Motivação Muitas classes devem ter apenas uma instância –
escalonadores, window managers, objetos top-level (como a locadora de vídeo) e assim por diante. Deve ser possível garantir essa restrição.
return uniqueInstance
![Page 16: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/16.jpg)
16
Singleton - Exemplo
return uniqueInstance
Store
static Instance( )AddTape( )GetAddress( )
static uniqueInstanceAddress
class Store { public: static Store* Instance( ); protected: Store(); private: static Store* uniqueInstance;}
![Page 17: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/17.jpg)
17
Singleton - Exemplo
return uniqueInstance
Store
static Instance( )AddTape( )GetAddress( )
static uniqueInstanceAddress
Store* Store::uniqueInstance = 0;
Store* Store::Instance( ) { if (uniqueInstance == 0) { uniqueInstance = new Store; } return uniqueInstance;}
![Page 18: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/18.jpg)
18
Singleton - Aplicabilidade
Use o padrão Singleton para garantir que há no máximo uma instância de
uma classe permitir que clientes tenham fácil acesso a
essa instância permitir que a instância única seja extensível
através de subclasses.
![Page 19: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/19.jpg)
19
Singleton – Consequências
Acesso controlado à única instância Espaço de nomes reduzido
melhor do que variáveis globais que guardam instâncias únicas
Pode ter subclasses Permite um número variável de instâncias Mais flexível do que operações de classe
ou seja, métodos static operações de classe não podem ser usadas
polimorficamente
![Page 20: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/20.jpg)
20
Padrões estruturais
Adapter Bridge Composite Decorator Façade Flyweight Proxy
![Page 21: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/21.jpg)
21
Padrões estruturais Lidam com o modo como classes e
objetos são compostos para formar estruturas maiores
Descrevem formas de se compor objetos para obter funcionalidade nova
![Page 22: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/22.jpg)
22
Adapter
Intenção Converter a interface de uma classe em outra
interface que os clientes esperam. Permitir que classes trabalhem juntas quando não
poderiam normalmente devido a interfaces incompatíveis.
Shape
draw( )getBoundingBox( )
Circle Rectangle
Polygon
display( )getBoundaries( )
Motivação Suponha que você
queira reutilizar uma classe como parte da sua hierarquia, mas ela não tem a interface que você precisa.
![Page 23: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/23.jpg)
23
Adapter (nível de classes) - Estrutura
Client
SpecificRequest( )
Target
Request( )
Adapter
Request( )
SpecificRequest()
Adaptee
SpecificRequest( )
![Page 24: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/24.jpg)
24
Adapter - Estrutura
Client
adaptee->SpecificRequest( )
Target
Request( )
Adapter
Request( )
Adaptee
SpecificRequest( )
adaptee
![Page 25: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/25.jpg)
25
Adapter - Exemplo
Client
polygon->Display( )
Shape
draw( )
PolygonAdapter
draw( )
Polygon
Display( )
polygon
![Page 26: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/26.jpg)
26
Adapter - Aplicabilidade
Use o padrão adapter para usar uma classe existente que não tem uma
interface que corresponde às suas necessidades
![Page 27: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/27.jpg)
27
Adapter - Consequências
Adapters (classes) faz a adaptação usando uma classe
adaptadora concretanão funciona se precisarmos adaptar uma
classe e suas subclasses permite que o adaptador altere o
comportamento do adaptado introduz apenas um objeto não requer o uso de pointers (C++)
![Page 28: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/28.jpg)
28
Adapter - Consequências
Adapter permite que um único Adapter funcione com
muitos “adaptados”o adaptado e todas suas subclassespode acrescentar funcionalidade a todos os
adaptados de uma vez
![Page 29: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/29.jpg)
29
Composite Intenção
Compor objetos em estruturas de árvore para representar hierarquias parte-todo. Composite permite aos clientes tratarem objetos individuas e compostos de maneira uniforme.
Motivação Suponha que você tenha um editor gráfico que permita que
você agrupe figuras para compor figuras mais complexas que podem ser manipuladas como figuras primitivas.
![Page 30: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/30.jpg)
30
Composite - Estrutura
forall g in children g.Operation( )
Component
Operation( )Add(Component)Remove(Component)GetChild(int)
Leaf
Operation( )
Composite
Operation( )Add(Component)Remove(Component)GetChild(int)
Client
children
![Page 31: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/31.jpg)
31
Composite - Exemplo
forall g in graphics g.Draw( )
Graphic
Draw( )Add(Graphic)Remove(Graphic)GetChild(int)
Circle
Draw( )
Picture
Draw( )Add(Graphic g)Remove(Graphic)GetChild(int)
Client
graphics
![Page 32: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/32.jpg)
32
Composite - Aplicabilidade
Use o padrão Composite para representar hierarquias parte-todo
recursivamente permitir aos clientes que ignorem a diferença
entre composições de objetos e objetos individuais
![Page 33: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/33.jpg)
33
Composite - Consequências Define hierarquias de classes que consistem de
objetos primitivos e objetos compostos sempre que um cliente esperar um objeto primitivo,
pode receber um composto Simplifica os clientes
os cliente não sabem se estão lidando com objetos simples ou compostos.
Facilita a adição de novos tipos de componentes Pode tornar o projeto geral demais
é difícil restringir os componentes de um composite.
![Page 34: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/34.jpg)
34
Façade Intenção
Provê uma interface única para um conjunto de interfaces em um subsistema. Uma façade define uma interface de alto nível que torna o subsistema mais fácil de usar.
Motivação Suponha que você tenha um termostato que regula um ar
condicionado baseado em vários sensores e controladores.
Desired Temp
Actual Temp
Occupancy
Thermostat
desired temp?
actual temp?
anyone in room?
![Page 35: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/35.jpg)
35
Façade - Estrutura
Client
Façade
![Page 36: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/36.jpg)
36
Façade - Exemplo
Desired Temp
Actual Temp
Occupancy
Thermostat
Room
do_you_need_cool_air( )
![Page 37: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/37.jpg)
37
Façade - Aplicabilidade
Use o padrão Façade para fornecer uma interface simples para um
subsistema complexo desacoplar um subsistema dos clientes e de
outros subsistemas definir um ponto de entrada para cada nível
em uma arquitetura de camadas
![Page 38: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/38.jpg)
38
Façade - Consequências
Isola clientes de componentes do subsistema reduz o número de objetos com os quais o cliente
precisa se comunicar torna o subsistema mais simples de se usar
Promove baixo acoplamento entre o subsistema e seus clientes é possível mudar os componentes do subsistema sem
afetar os clientes
Não impede que as aplicações acessem os componentes se for necessário pode-se escolher entre facilidade de uso e generalidade
![Page 39: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/39.jpg)
39
Padrões comportamentais Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
![Page 40: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/40.jpg)
40
Padrões comportamentais
Lidam com algoritmos e a distribuição de responsabilidades entre objetos
Descrevem os padrões de comunicação entre objetos relacionados
![Page 41: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/41.jpg)
41
Strategy Intenção
Definir uma família de algoritmos, encapsular cada um, e torná-los intercambiáveis. Esse padrão deixa o algoritmo variar de forma independente dos clientes que o utilizam.
Motivação Em um buffer síncrono, há muitas formas de se lidar
com as situações em que o buffer está vazio ou cheio: pode-se ignorar pedidos, ou bloqueá-los até que possam ser satisfeitos, ou esperar algum tempo antes de desistir.
Como você permite que o algoritmo seja escolhido em tempo de execução?
![Page 42: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/42.jpg)
42
Strategy - Estrutura
Context
ContextInterface( )
Strategy
AlgorithmInterface( )
strategy
ConcreteStrategyA
AlgorithmInterface( )
ConcreteStrategyB
AlgorithmInterface( )
![Page 43: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/43.jpg)
43
Strategy - Exemplo
BoundedBuffer
Read( )Write( )
BufferStrategy
Handle( )
empty_buffer
Drop
Handle( )
Block
Handle( )
PersistentBuffer
Read( )Write( )
full_buffer
if buffer empty { empty_buffer.handle( );}
Timeout
Handle( )
![Page 44: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/44.jpg)
44
Strategy - Aplicabilidade
Use o padrão Strategy para configurar uma classe com um de muitos
comportamentos possíveis ter diversos algoritmos do mesmo tipo esconder estruturas de dados complexas e
específicas a determinados algoritmos evitar o uso de comandos condicionais dentro
de classes para selecionar um entre vários comportamentos possíveis
![Page 45: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/45.jpg)
45
Strategy - Consequências Famílias de algoritmos relacionados
Algoritmos são agrupados em sua própria hierarquia de classes
Uma alternativa para a herança Evita o problema de explosão de classes
Elimina comandos condicionais Permite escolha de implementações Clientes devem estar cientes das estratégias Overhead de comunicação Maior número de objetos
![Page 46: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/46.jpg)
46
Observer Intenção
Definir uma dependência um-para-muitos entre objetos de forma que quando um objeto muda de estado, todos seus dependentes são notificados e atualizados automaticamente.
Motivação Suponha que você tem duas formas de aumentar o
volume no seu mp3 player – usando uma escala deslizante, ou digitando uma percentagem do volume máximo. Como você garante que uma é atualizada se a outra for usada?
![Page 47: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/47.jpg)
47
Observer - Estrutura
Subject
Attach(Observer)Detach(Observer)
Notify( )
ConcreteSubject
GetState( )SetState( )
subjectState
for all o in observers { o->Update( )}
return subjectState
Observer
Update( )
ConcreteObserver
Update( )
observerState
observerState = subject->getState( )
subject
observers
![Page 48: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/48.jpg)
48
Observer - Exemplo
Subject
Attach(Observer)Detach(Observer)
Notify( )
MediaPlayer
GetVolume( )SetVolume( )
volume
Observer
Update( )
VolumeSlider
Update( )
level
level = subject->getVolume( )
subject
observers
NumericDisplay
Update( )
value
subject
![Page 49: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/49.jpg)
49
Observer - Aplicabilidade
Use o padrão Observer para manter dois ou mais aspectos
interdependentes de uma abstração, ao mesmo tempo permitindo que sejam reutilizados independentemente.
mudar um objeto causando mudanças em outros objetos, sendo que não se sabe a priori quantos objetos precisam ser mudados.
fazer um objeto notificar outros objetos de que seu estado mudou, sem assumir nada sobre os outros objetos.
![Page 50: 1 Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson](https://reader036.vdocuments.net/reader036/viewer/2022062312/552fc0f8497959413d8b5d09/html5/thumbnails/50.jpg)
50
Observer - Consequências
Acoplamento abstrato entre o sujeito e o observador O sujeito sabe que tem uma lista de
observadores, mas não sabe quem são os observadores.
Suporte para comunicação em broadcast notificações são enviadas a todos os objetos
interessados
Atualizações inesperadas pode ser difícil descobrir exatamente o que
mudou no sujeito