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. Acțiunile ca valori pot fi păstrate în liste, pot fi puse în coadă, amânate, înregistrate în jurnal și reluate.

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


Exemplu: scriere cu anulare

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

Acțiuni care se pot inversa singure

Greșeala de tipar „wrold” nu este eliminată de un cod special, ci de comanda care a adăugat-o — numai ea știe exact ce trebuie retras. array_pop scoate ultima comandă din istoric.

Prompt
Scrie un script PHP cu șablonul Command: o interfață Command cu execute și undo, un Document care păstrează un tablou words și o comandă AddText care adaugă un cuvânt în document și îl poate elimina din nou. Execută două comenzi (a doua adaugă o greșeală de tipar), păstrează-le într-un istoric, afișează documentul, anulează ultima comandă și afișează din nou.
Ieșire: script PHP

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 păstrate sau inversate.

Renunță la el când acțiunile sunt de tipul „execută și uită”. În PHP, o acțiune simplă pusă în coadă este adesea doar o închidere (closure) într-un tablou — șablonul complet își merită costul numai când e nevoie de anulare sau de inspecție.


Avantaje și dezavantaje

Avantaje: anularea/refacerea devine naturală; acțiunile pot fi puse în coadă, înregistrate în jurnal ș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.