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 nimănui interiorul obiectului. Obiectul însuși face instantaneul și tot el se restaurează din acesta; lumea din afară doar păstrează instantaneele.

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


Exemplu: instantanee ale editorului

save() returnează un instantaneu — o dataclass înghețată pe care cel care o păstrează nu o poate modifica; restore() primește unul înapoi. Greșeala dintre ele pur și simplu dispare.

Salvează, strică, restaurează

Instantaneul a fost făcut cât timp textul era bun. După editarea greșită, restore(saved) readuce exact starea veche — cel care păstrează instantaneul nu s-a uitat niciodată înăuntrul lui.

Prompt
Scrie un program Python cu șablonul Memento: un Editor cu un câmp de text, o dataclass înghețată Snapshot, o metodă save care returnează un instantaneu și o metodă restore care primește unul. Scrie un text bun, salvează, fă o editare greșită, afișeaz-o, restaurează instantaneul și afișează textul recuperat.
Ieșire: program Python complet

Când să-l folosești

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

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


Avantaje și dezavantaje

Avantaje: revenire reală fără a expune detaliile interne; instantaneele sunt valori simple care pot fi păstrate în liste pentru anulare pe mai multe niveluri.

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