Em um sistema web desenvolvido em Java, qual padrão de projeto (design pattern) é mais adequado para gerenciar diferentes estados de um pedido em um e-commerce?
- A)Factory Method
Errada: Factory Method serve para criar objetos sem expor a lógica de instanciação, não para controlar os diferentes estados de um pedido.
- B)State Pattern
Certa: o State Pattern é ideal quando o comportamento do objeto muda conforme seu estado interno, como acontece com um pedido em fases diferentes.
- C)Singleton
Errada: Singleton garante uma única instância da classe, o que não resolve gerenciamento de estados de um pedido.
- D)Observer
Errada: Observer é usado para notificar interessados sobre mudanças, não para modelar os estados e transições do pedido.
- E)Strategy
Errada: Strategy troca algoritmos de forma flexível, mas aqui o problema é a mudança de comportamento conforme o estado, não a escolha de uma estratégia.
Gabarito: B
Quando você tem um objeto que muda de comportamento conforme o momento do processo, o padrão mais adequado costuma ser o State. Pense no pedido de um e-commerce: ele pode estar "Novo", "Pago", "Separado", "Enviado", "Entregue" ou "Cancelado". Em cada fase, as regras mudam, e o código fica mais limpo quando cada estado sabe o que pode ou não fazer, em vez de ficar cheio de if e switch espalhados por todo lado. O State Pattern serve justamente para representar o comportamento de um objeto quando seu estado interno muda. A ideia é evitar aquela lógica engessada de "se estiver pago faz isso, se estiver enviado faz aquilo". Em vez disso, cada estado encapsula suas próprias regras, tornando o sistema mais fácil de manter e evoluir. No caso da questão, o pedido em um e-commerce é um exemplo clássico: não faz sentido permitir "enviar" um pedido ainda não pago, por exemplo. Com State, o próprio estado do pedido controla as transições e ações válidas, deixando o código mais organizado e próximo da regra de negócio. É por isso que a alternativa B está correta. Em concursos, vale guardar a diferença: State trata mudança de comportamento conforme o estado interno; Strategy trata troca de algoritmo por escolha externa. Aqui não é sobre escolher uma estratégia de cálculo, e sim sobre a vida do pedido mudando de fase. É o tipo de detalhe que banca adora cobrar com sorriso maroto.