Padrões de estrategia de software
Visitor – Strategy - State
Visitor
●
Definição
É um padrão comportamental com o propósito de representar operações a serem realizadas sobre objetos.
Permite adicionar operações especializadas sem a necessidade de modificar diversas classes.
Usado no compilador do SmallTalk-80.
Visitor
●
Contexto
Devemos representar operações específicas que devem ser executadas sobre objetos de diferentes classes.
Solução usual: implementar a operação separadamente em cada classe.
Solução do Visitor: separar o comportamento da classe, implementando todas as operações em uma única nova classe. Visitor
●
Problema
Exemplo ilustrado com um Compilador:
Árvore sintática abstrata:
● Operadores;
● Variáveis;
● Expressões matemáticas;
Exemplo de operações de um compilador na árvore sintática abstrata:
● Formatação;
● Verificação de tipos;
● Verificar se todas as variáveis estão definidas;
● Geração de código
Visitor
●
Problema
Problema: As operações podem necessitar tratar cada tipo de nó de maneira diferente
Desvantagens da solução usual no exemplo:
● Inclusão de novas operações requer a mudança de todas as classes de nós;
● Poluição das classes com muitas operações
– Mistura de verificação de tipos com formatação
Uso do Visitor:
● O objeto Visitor percorre os elementos da árvore;
● Se um nó da árvore “aceita” um visitor, então chama um método seu que inclui o tipo do nó como argumento e executa a operação para aquele nó (a operação que costumava estar na classe nó)
Visitor
●
Aplicabilidade
Quando se têm muitas classes de objetos com interfaces distintas e quer-se realizar operações nesses objetos que dependam das suas classes concretas Quando a estrutura de objetos é utilizada por diversas aplicações Quando se quer evitar a poluição da classe com operações não-relacionadas e que são utilizadas em vários objetos
Quando a estrutura que define os objetos é
praticamente