Pular para o conteúdo principal

Padrão State

O Padrão State é um dos padrões comportamentais que permite que um objeto altere seu comportamento quando seu estado interno muda. O padrão encapsula estados em classes separadas e delega o trabalho para o objeto que representa o estado atual, fazendo parecer que o objeto mudou de classe.

Quando usar o Padrão State?

  • Quando um objeto precisa mudar seu comportamento em tempo de execução dependendo de seu estado.
  • Quando você tem muitas condicionais (if/switch) que escolhem diferentes comportamentos baseados no estado do objeto.
  • Quando diferentes estados compartilham código similar ou precisam de transições de estado complexas.
  • Quando você quer evitar grandes blocos condicionais que verificam o estado antes de cada operação.

Exemplo Prático em TypeScript

A seguir, veremos um exemplo de como o Padrão State pode ser implementado em TypeScript. Suponha que estamos desenvolvendo um player de música que pode estar em diferentes estados (parado, tocando, pausado) e se comporta de maneira diferente dependendo do estado atual.

Implementação

src/design-patterns/state.ts
loading...

Exemplo de uso

const player = new PlayerDeMusica();

// Estado inicial: Parado
player.play("Bohemian Rhapsody");
// Output: Tocando: Bohemian Rhapsody

// Estado: Tocando
player.pause();
// Output: Pausado: Bohemian Rhapsody

// Estado: Pausado
player.play();
// Output: Retomando: Bohemian Rhapsody

// Estado: Tocando
player.play("Imagine");
// Output: Tocando: Imagine (troca de música)

player.stop();
// Output: Player parado

// Estado: Parado
player.pause();
// Output: Player já está parado (ação inválida neste estado)

Neste exemplo, o PlayerDeMusica delega todas as operações (play, pause, stop) para o objeto de estado atual. Cada estado (EstadoParado, EstadoTocando, EstadoPausado) implementa essas operações de forma diferente e controla as transições para outros estados. Isso elimina a necessidade de grandes blocos condicionais e torna fácil adicionar novos estados ou modificar comportamentos existentes.

Conclusão

O padrão State é ideal para objetos cujo comportamento muda significativamente baseado em seu estado interno. Ele organiza código relacionado a estados específicos em classes separadas, facilita a adição de novos estados e torna as transições de estado explícitas. É amplamente usado em máquinas de estado, protocolos de rede, players de mídia e fluxos de trabalho com múltiplos estágios.

Explore os demais padrões de projeto nesta seção para aprofundar seu conhecimento e aprimorar suas habilidades de desenvolvimento de software, com exemplos práticos em TypeScript!