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

State

O objeto tem um ciclo de vida com transições legítimas e ilegítimas.

Ver o conceito completo

Strategy

Existem várias formas de fazer a mesma coisa e alguém de fora escolhe qual.

Ver o conceito completo

Por 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.