O exemplo do pedido

Um pedido pode ser rascunho, confirmado ou cancelado. Se cada operação acumula condicionais para todos esses estados, torna-se fácil permitir transições inválidas ou esquecer um caso.

Exemplo conceitual em C#

public interface IEstadoPedido
{
    IEstadoPedido Confirmar();
}
public sealed class Rascunho : IEstadoPedido
{
    public IEstadoPedido Confirmar() => new Confirmado();
}
public sealed class Confirmado : IEstadoPedido
{
    public IEstadoPedido Confirmar() =>
        throw new InvalidOperationException("Pedido já confirmado.");
}

A entidade ou contexto mantém o estado atual e delega operações; as transições são explícitas e podem ser testadas isoladamente.

Quando e como evitar excesso

Use quando estados alteram significativamente operações e transições. Para poucos estados com regras simples, um enum e uma validação central podem ser mais claros. Compare com Strategy: State representa condição e transições do ciclo de vida; Strategy seleciona um algoritmo. Mais no catálogo GoF.