Baixe o app para aproveitar ainda mais
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.
Compartilhar