Padrões Comportamentais Template Method Define o esqueleto de um algoritmo em uma operação, passando a implementação de alguns passos para subclasses dessa foram permitindo que alguns passos sejam definidos na subclasse sem alterar a estrutura do algoritmo. Participantes AbstractClass - implementa um método template (genérico) que define o esqueleto de um algoritmo onde são utilizados os métodos abstratos(primitivos) que devem ser implementados nas subclasses. ConcreteClass - implementa as operações primitivas definidas na superclasse permitindo a subclasse definir como as partes específicas do algoritmo serão implementadas. State Tem por objetivo permitir que um objeto altere seu comportamento quando seu estado interno muda. O objeto parecerá ter mudado de classe. (Gamma et al, 2000) Participantes Context - define a interface de interesse aos clientes através da qual serão feitas as suscitações a um determinado comportamento e é responsável por manter uma instância de uma subclasse ConcreteState que define o estado atual. State - define uma interface para encapsular o comportamento associado com um estado particular do contexto, esse participante declara os métodos relativos às transições. 1 ConcretState - cada subclasse implementa um comportamento associado a um estado de Contexto Command Encapsular uma solicitação como um objeto, assim, permitindo parametrizar clientes com diferentes solicitações, enfileirar ou criar um log de solicitações e suporte a operações que podem ser desfeitas. (Gamma et al, 2000) Participantes Command - declara uma interface para a execução de um comando ConcreteCommand - implementa a lógica que deve ser executada quando o Invoker fizer a solicitação além de poder definir uma vinculação entre um objeto Receiver que é responsável por executar a tarefa. Invoker - pede o comando para realizar uma tarefa Receptor - sabe como executar as tarefas associadas à realização do comando. Client - cria um objeto ConcreteCommand e define seu receptor Strategy Segundo (Gamma et al, 2000) o esse padrão define uma família de algoritmos, encapsula cada um deles, e torna-os intercambiáveis. Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam. Participantes Strategy - declara uma interface comum a todos os algoritmos suportados 2 ConcreteStrategy - implementa o algoritmo usando a interface declarada em Strategy Contexto - mantém uma referência a um objeto de Strategy podendo mudar a ConcreteStrategy referenciada em tempo de execução. (Gamma et al, 2000) Iterator Fornecem uma maneira de acessar os elementos de um objeto agregado sequencialmente sem expor sua representação subjacente. Participantes Iterator - define a interface para acessar e percorrer os elementos. ConcreteIterator - Implementa a interface Iterator e mantém o controle da posição corrente no percurso do agregado. Aggregate - define uma interface para a criação de um objeto Iterator. ConcreteAggregate - implementa a interface de criação do Iterador para retornar uma instância do ConcreteIterador. Observer Definir uma dependência um-para-muitos entre objetos para que quando um objeto mude de estado, todos os seus dependentes são notificados e atualizados automaticamente. (Gamma et al, 2000) 3 Subject - conhece seus observadores além de fornecer uma interface para anexação e “desanexação” dos objetos Observer. ConcreteSubject - armazena os estados de interesse para ConcreteObserver e envia uma notificação para seus observadores quando seu estado muda. Observer - define uma interface de atualização para objetos que devem ser notificados quando ocorrerem mudanças em um Subject. ConcreteObserver - mantém uma referência a um objeto ConcreteSubject, armazena estado que deve ficar consistente com o do Subject 4