Treci la conținutul principal

Ce este

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

În momentul în care ai nevoie de anulare (undo), ai nevoie de comenzi: ceva trebuie să rețină ce s-a făcut, ca să poată face operația inversă.


Exemplu: scriere cu anulare

Fiecare cuvânt adăugat în document este o comandă cu Execute() și Undo(). Comenzile executate ajung într-o listă de istoric — anularea înseamnă pur și simplu să îi ceri ultimei comenzi să se dea înapoi.

Acțiuni care se pot da singure înapoi

Greșeala de tastare „lmue” nu este ștearsă de un cod special, ci chiar de comanda care a adăugat-o — doar ea știe exact ce trebuie luat înapoi.

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

Când să îl folosești

Folosește-l pentru undo/redo, cozi de acțiuni, macrocomenzi și jurnale de audit — oriunde acțiunile trebuie păstrate sau anulate.

Renunță la el când acțiunile sunt de tipul „execută și uită”. În Go, o acțiune simplă pusă la coadă este adesea doar o valoare de tip funcție trimisă printr-un canal — șablonul complet își merită efortul doar când ai nevoie de anulare sau de inspecție.


Avantaje și dezavantaje

Avantaje: undo/redo devine ceva natural; acțiunile pot fi puse la coadă, înregistrate în jurnal și reluate; acțiunile noi se adaugă fără a modifica invocatorul.

Dezavantaje: câte un tip pentru fiecare acțiune se adună repede; starea corectă pentru anulare este delicată — o comandă trebuie să rețină tot ce îi este necesar ca să se poată da înapoi.