State × Strategy
Dois padrões que costumam ser trocados um pelo outro, e o que de fato os separa.
Em uma frase
Estruturalmente gêmeos. No Strategy quem escolhe é o cliente, e as opções não se conhecem; no State quem decide a próxima é o próprio estado, que conhece os outros.
Critério a critério
Quem troca o objeto injetado?
- State
- O próprio estado atual, ao processar um evento.
- Strategy
- O cliente, de fora, antes ou durante o uso.
As alternativas se conhecem?
- State
- Sim — cada estado sabe para quais pode transitar.
- Strategy
- Não, e não deveriam: são intercambiáveis e independentes.
O que está sendo modelado?
- State
- Um ciclo de vida: rascunho → pago → enviado → entregue.
- Strategy
- Uma escolha de como fazer: Sedex, PAC, retirada.
A ordem importa?
- State
- Sim — transições inválidas devem ser impossíveis.
- Strategy
- Não. Qualquer estratégia serve a qualquer momento.
Quando escolher cada um
Strategy
Existem várias formas de fazer a mesma coisa e alguém de fora escolhe qual.
Ver o conceito completoPor que confundem
O diagrama de classes é praticamente o mesmo, o que leva a usar um pelo outro sem prejuízo aparente — até o dia em que uma transição inválida acontece porque ninguém era dono da regra. Se existe 'não pode ir de X para Y', é State.