BEHAVIORAL

Command

Incapsulare una richiesta come oggetto, permettendo di parametrizzare client con diverse richieste, accodare richieste, e supportare operazioni annullabili.

Il Problema

Quando vuoi disaccoppiare l'oggetto che invoca l'operazione da quello che sa come eseguirla, o quando serve undo/redo.

La Soluzione

Incapsulare richieste come oggetti Command con metodo execute(). Invoker chiama execute() senza conoscere i dettagli. Receiver esegue il lavoro effettivo.

Struttura

Command interface con execute(). ConcreteCommand implementa execute() e chiama metodi su Receiver. Invoker memorizza Command.

Partecipanti:
Command - interfaccia per eseguire operazione
ConcreteCommand - implementa execute() e invoca metodi su Receiver
Receiver - sa come eseguire operazioni
Invoker - chiede al command di eseguire richiesta
Client - crea ConcreteCommand e imposta Receiver
Esempi di Codice

Command per Text Editor (Undo/Redo)

Editor di testo con supporto per undo/redo delle operazioni.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Text editors (undo/redo)
Transaction systems (commit/rollback)
GUI buttons (ogni button esegue un command)
Job queues (background jobs)
Macro recording (registra sequenze di comandi)
Quando Usarlo
Quando vuoi parametrizzare oggetti con operazioni
Quando serve supporto per undo/redo
Quando vuoi accodare richieste o loggarle
Quando serve supporto per transazioni
Quando NON Usarlo
Quando le operazioni sono semplici callback
Quando non serve undo/redo o history
Quando aggiunge complessità inutile
Pattern Correlati