Eduardo Bezerra edubezerra@gmail.com Padrões GoF (State) Eduardo Bezerra edubezerra@gmail.com
State Intenção: permitir que um objeto altere seu comportamento em função de uma mudança no seu estado. Solução: Criar uma hierarquia de classes separada para representar os estados de um objeto. Cada subclasse da hierarquia representa um dos possíveis estados do objeto. Ligar este objeto a seu estado corrente utilizando o relacionamento de composição. Cada subclasse da hierarquia deve implementar o comportamento correspondente a seu estado.
Estrutura do State Context State state request() handle() ConcreteStateA ConcreteStateB handle() handle() state.handle();
State (conseqüências) Localiza o comportamento de um estado específico e divide o comportamento por diferentes estados. O padrão State coloca todo comportamento associado a um estado particular em um objeto. Assim, todo código de um estado específico fica em uma subclasse da classe State, podendo ser adicionados novos estados e transições; Faz a transição de estados explicitamente;
State (aplicabilidade) Quando o comportamento de um objeto depende de seu estado, e este comportamento deve ser mudado em tempo de execução conforme as mudanças ocorridas em seu estado; Quando operações possuem comandos condicionais muito grandes, que dependem do estado do objeto. Este estado é usualmente representado por uma ou mais constantes enumeradas. Freqüentemente, muitas operações irão conter a mesma estrutura condicional. State coloca cada ramo dessa estrutura em uma classe separada. Dessa maneira, o estado do objeto pode ser tratado como um objeto.
State (aplicabilidade) Uma companhia de aviação tem os seus clientes categorizados em função do número de pontos acumulados: MembroPrata (<=1000), MembroOuro (>1000 e <=5000), MembroPlatina (>5000). Existe a necessidade de uma operação getPreço(), que interroga um membro sobre o desconto aplicável em uma determinada viagem.