State
Descrição:
State, ou Estado, é um padrão de projeto que permite a um objeto alterar seu comportamento quando seu estado interno muda. Quando analisado por fora, o objeto aparentará que está mudando suas classes.
Diagrama de Classes genérico do padrão:

Exemplo:
A ideia do exemplo apresentada no livro consiste num sistema de controle para uma máquina
distribuidora de chicletes, aqueles que se poem uma moeda, gira a catraca e pega o chiclete.
Esta atividade parece bem simples, mas é preciso tomar algumas precauções para que a máquina
funcione corretamente, como por exemplo:
- Não pode dar doces se não houver uma moeda.
- Não pode colocar duas moedas na máquina simultâneamente.
- Não pode ejetar uma moeda que não está na máquina.
- Não se pode distribuir mais de um doce por girada de catraca.
Para isso, é preciso analisar os estados que a máquina possui e então separá-las em classes diferentes
dentro da uml, cada uma possuindo um comportamento para quando não existe uma moeda(NO_QUARTER), quando
existe uma moeda(HAS_QUARTER), quando se vende um chiclete(SOLD) e quando não existem mais chicletes na
máquina(SOLD_OUT).
Cada um desses Estados que atualmente estão separados na uml, estarão juntas dentro de uma grande classe
chamada de gumball_machine, classe que controlará esses estados, dentro do padrão esta classe seria o
context.
A gumball_machine irá identificar quando uma moeda é colocada e mudará o estado interno da classe
para HAS_QUARTER, e todos os comportamentos para quando se coloca uma moeda, se tira, gira a catraca
e libera o chiclete corresponderão a esse estado, o mesmo quando não existe moeda, quando se vende um chiclete
e quando não existe mais nenhum na máquina.
Diagrama de Classes do exemplo:

