Treci la conținutul principal

Ce este

Șablonul Command transformă o acțiune într-o valoare: un obiect care știe cum să se execute singur — și adesea cum să se anuleze singur. Acțiunile ca valori pot fi stocate în tablouri, puse la coadă, amânate, înregistrate și reluate.

În momentul în care ai nevoie de anulare, ai nevoie de comenzi: ceva trebuie să rețină ce s-a făcut, ca să facă opusul.


Exemplu: scriere cu anulare

Fiecare cuvânt adăugat în document este o comandă cu execute() și undo(). Comenzile executate ajung într-un tablou de istoric — anularea înseamnă pur și simplu să ceri ultimei comenzi să se inverseze.

Acțiuni care se pot inversa singure

Greșeala de tastare wrold este eliminată nu de un cod special, ci de comanda care a adăugat-o — doar ea știe exact ce să retragă. Fiecare comandă păstrează chiar tabloul documentului, așa că push și pop ale ei modifică documentul apelantului.

Prompt
Scrie un program TypeScript cu șablonul Command: o interfață Command cu execute și undo și o clasă de comandă AddText care adaugă un cuvânt într-un tablou document și îl poate scoate înapoi. Execută două comenzi (a doua adaugă o greșeală de tastare), păstrează-le într-un tablou de istoric, afișează documentul, anulează ultima comandă și afișează din nou.
Ieșire: program TypeScript și rezultatul capturat

Când să îl folosești

Folosește-l pentru anulare/refacere, cozi de acțiuni, macrocomenzi și jurnale de audit — oriunde acțiunile trebuie stocate sau inversate.

Renunță la el când acțiunile se execută și se uită. O acțiune pusă la coadă, fără nimic de anulat, este adesea doar o valoare de tip funcție într-un tablou — șablonul complet își merită costul doar când este nevoie de anulare sau de inspecție.


Avantaje și dezavantaje

Avantaje: anularea/refacerea devine naturală; acțiunile pot fi puse la coadă, înregistrate și reluate; acțiunile noi se adaugă fără a atinge invocatorul.

Dezavantaje: o clasă pentru fiecare acțiune se adună repede; starea corectă pentru anulare este subtilă — o comandă trebuie să capteze tot ce îi trebuie ca să se inverseze.