Treci la conținutul principal

Ce este

Șablonul Memento salvează un instantaneu al stării unui obiect, ca să poată fi restaurată mai târziu — fără a arăta cuiva interiorul obiectului. Obiectul însuși creează instantaneul și tot el se restaurează din el; lumea din exterior doar păstrează instantaneele.

Acesta este șablonul din spatele funcției „anulează până la un punct salvat”, al ciornelor și al punctelor de control.


Exemplu: instantanee ale editorului

save() returnează un instantaneu; restore() îl primește înapoi. Greșeala făcută între timp pur și simplu dispare.

{ ...this } copiază valorile câmpurilor obiectului într-un obiect nou. Această copie contează: dacă instantaneul ar fi chiar obiectul, orice modificare ulterioară ar schimba și „starea veche”. Pentru o stare care conține obiecte sau tablouri imbricate, folosește structuredClone(this) — spread-ul copiază doar primul nivel.

Salvează, strică, restaurează

Instantaneul a fost luat cât timp textul era Salut, lume!. După modificarea greșită, editorul afișează Salut, lmue! hopa, iar apoi restore(saved) aduce înapoi exact textul vechi — cel care păstra instantaneul nu s-a uitat niciodată în interiorul lui.

Prompt
Scrie un program TypeScript cu șablonul Memento: o clasă Editor cu un câmp text, un tip Snapshot cu un câmp text readonly, o metodă save care returnează un instantaneu creat printr-o copie cu spread și o metodă restore care primește unul. Scrie un text bun, salvează, fă o modificare greșită, afișeaz-o, restaurează instantaneul și afișează textul recuperat.
Ieșire: program TypeScript și rezultatul capturat

Când să îl folosești

Folosește-l pentru puncte de control și revenire: anularea în editor, salvările din jocuri, „restaurează valorile implicite”, pași tranzacționali care ar putea avea nevoie de anulare.

Renunță la el când starea este una sau două valori simple — păstrează pur și simplu valoarea veche într-o variabilă. Și compară-l cu Command: comenzile anulează pas cu pas, mementourile sar înapoi la un punct salvat.


Avantaje și dezavantaje

Avantaje: revenire reală fără a expune interiorul; instantaneele sunt valori simple care pot fi păstrate într-un tablou pentru anulare pe mai multe niveluri; marcarea câmpurilor lor cu readonly îi împiedică pe cei care le păstrează să le modifice.

Dezavantaje: instantaneele unei stări mari consumă rapid memorie; este ușor să greșești când decizi ce intră în instantaneu (și când trebuie să îl păstrezi complet pe măsură ce clasa crește).