Buscar

Aula 32 - Visitor

Prévia do material em texto

Modelagem de 
Padrões de Projeto
Aula 32 - Visitor
Visitor
(aka Visitante)
Criacionais
Ilustrações: SHVETS (2022)
Prototype
Abstract 
Factory
Builder
Factory 
Method
Singleton
Command
Comportamentais
Chain of 
Responsibility
Memento
Observer
Visitor
Template 
Method
Iterator
State
Strategy
Mediator
✓
✓
✓
✓
✓
✓
✓
Estruturais
Adapter
Flyweight
Bridge
FacadeDecorator
Composite
Proxy
✓ ✓
✓
✓
✓✓
✓
✓
✓✓
✓
✓
● É um padrão cujo objetivo é separar os algoritmos dos objetos que são 
manipulados por esses algoritmos.
Definição
Exemplo - 
Estrutura
A interface Visitante 
declara um conjunto de 
métodos visitantes que 
podem receber elementos 
concretos de uma estrutura 
de objetos como argumentos. 
Esses métodos podem ter os 
mesmos nomes se o 
programa é escrito em uma 
linguagem que suporta 
sobrecarregamento, mas o 
tipo dos parâmetros devem 
ser diferentes..
Fonte: SHVETS (2022)
Estrutura
Cada Visitante Concreto 
implementa diversas versões 
do mesmo comportamento, 
feitos sob medida para 
diferentes elementos 
concretos de classes.
Fonte: SHVETS (2022)
Estrutura
A interface Elemento 
declara um método para 
“aceitar” visitantes. Esse 
método deve ter um 
parâmetro declarado com o 
tipo da interface do visitante.
Fonte: SHVETS (2022)
Estrutura
Cada Elemento Concreto deve 
implementar o método de 
aceitação. O propósito desse 
método é redirecionar a 
chamada para o método 
visitante apropriado que 
corresponde com a atual classe 
elemento. Esteja atento que 
mesmo se uma classe 
elemento base implemente 
esse método, todas as 
subclasses deve ainda 
sobrescrever esse método em 
suas próprias classes e chamar 
o método apropriado no objeto 
visitante.
Fonte: SHVETS (2022)
Estrutura
O Cliente geralmente 
representa uma coleção de 
outros objetos complexos (por 
exemplo, uma árvore 
Composite). Geralmente, os 
clientes não estão cientes de 
todas as classes elemento 
concretas porque eles 
trabalham com objetos daquela 
coleção através de uma 
interface abstrata.
Fonte: SHVETS (2022)
Im
ag
em
 d
e 
 F
re
ep
ik
Estudo de caso
✓ Aderente ao princípio do 
aberto/fechado.
✓ Princípio da responsabilidade 
única. Múltiplas versões do 
mesmo algoritmo agrupadas.
✓ O objeto visitante pode acumular 
informações sobre cada objeto 
visitado
Im
ag
em
 d
e 
p
ik
is
u
p
er
st
ar
 n
o
 F
re
ep
ik
(Des) Vantagens de utilizar o padrão
✖ A cada adição ou remoção da 
hierarquia de elementos, 
deve-se atualizar todos os 
visitantes
✖ Visitantes não podem acessar 
campos privados que podem 
ser necessários para executar o 
algoritmo.
D
úv
id
as
?
Atividade 41
Desenhe um diagrama UML que implemente o padrão Visitor para geração de 
PDF de uma série de relatórios (financeiro, estoque, vendas, fornecedores).
Responda às seguintes perguntas:
1. No que difere cada um dos métodos visitantes neste contexto?
2. O que preciso fazer para adicionar a exportação de um novo relatório de 
RH? Quais métodos teria que mudar? Quais classes teria que mudar?
3. Em qual situação o uso do Visitor seria preferível ao uso do padrão 
Strategy, neste contexto? Em qual caso o uso do Strategy seria mais 
conveniente?
Referências SHVETS, Alexander. Mergulho nos Padrões de Projeto. Edição 2023-1.24. Kyiv: Refactoring.guru. 2022.

Continue navegando