BEHAVIORAL

State

Permettere a un oggetto di alterare il suo comportamento quando il suo stato interno cambia. L'oggetto sembrerà cambiare classe.

Il Problema

Quando un oggetto ha molti stati e il comportamento cambia in base allo stato, finisci con condizionali complessi ovunque.

La Soluzione

Estrarre comportamenti specifici dello stato in classi State separate. Il contesto delega le operazioni all'oggetto State corrente.

Struttura

Context mantiene riferimento a ConcreteState corrente. State interface definisce metodi. ConcreteState implementa comportamento per stato specifico.

Partecipanti:
Context - mantiene istanza di ConcreteState che definisce stato corrente
State - interfaccia per incapsulare comportamento associato a stato
ConcreteState - implementa comportamento associato a uno stato del Context
Esempi di Codice

State per Vending Machine

Distributore automatico con stati: NoMoney, HasMoney, Dispensing.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
TCP connection (Closed, Listen, Established)
Order processing (Pending, Confirmed, Shipped, Delivered)
Media player (Playing, Paused, Stopped)
Document workflow (Draft, Review, Approved, Published)
Game character states (Idle, Walking, Running, Jumping)
Quando Usarlo
Quando comportamento di oggetto dipende dal suo stato
Quando hai condizionali lunghi basati sullo stato
Quando stati hanno comportamenti complessi
Quando le transizioni tra stati sono ben definite
Quando NON Usarlo
Quando hai pochi stati semplici
Quando lo stato non influenza il comportamento
Quando aggiunge complessità inutile