Treci la conținutul principal

Ce este

Șablonul Memento salvează o copie a stării unui obiect, ca ea să poată fi restaurată mai târziu — fără a arăta nimănui interiorul obiectului. Obiectul însuși face copia și tot el se restaurează din ea; lumea din exterior doar păstrează copiile.

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


Exemplu: copii ale stării editorului

Save() returnează o copie a stării; Restore() o primește înapoi. Greșeala făcută între cele două momente pur și simplu dispare.

Salvează, strică, restaurează

Copia a fost luată cât timp textul era bun. După modificarea greșită, Restore(saved) aduce înapoi exact starea veche — cel care ține copia nu s-a uitat niciodată în interiorul ei.

Prompt
Scrie un program Go cu șablonul Memento: un Editor cu un câmp text, un tip Snapshot, o metodă Save care returnează o copie a stării și o metodă Restore care primește una. Scrie un text bun, salvează-l, fă o modificare greșită, afișeaz-o, restaurează copia salvată și afișează textul recuperat.
Ieșire: program Go și rezultatul capturat

Când să îl folosești

Folosește-l pentru puncte de control și revenire: anularea într-un editor, salvările dintr-un joc, „revino la setările implicite”, pași tranzacționali care ar putea avea nevoie de anulare.

Renunță la el când starea înseamnă 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 detaliile interne; copiile stării sunt valori simple, care pot fi păstrate în liste pentru anulare pe mai multe niveluri.

Dezavantaje: copiile unei stări mari consumă repede memorie; a decide ce intră în copie (și a o păstra completă pe măsură ce tipul crește) este ușor de greșit.