Ý tưởng: chụp và lưu lại trạng thái nội bộ của một object để sau này khôi phục, mà không phá vỡ encapsulation (không lộ chi tiết bên trong ra ngoài).
Ba vai:
- Originator: object có trạng thái cần lưu; tạo memento (save()) và phục hồi từ memento (restore(m)).
- Memento: object bất biến giữ ảnh chụp trạng thái; chỉ Originator đọc được nội dung.
- Caretaker: giữ danh sách memento (thường là một stack), yêu cầu save/restore nhưng không xem nội dung.
Undo/redo: mỗi thay đổi → Caretaker push một memento vào stack undo; khi Undo → pop và restore; Redo dùng stack thứ hai. Editor văn bản, phần mềm đồ họa dùng đúng cơ chế này.
Đánh đổi: lưu full snapshot tốn bộ nhớ nếu state lớn hoặc thay đổi liên tục → cân nhắc lưu delta (Command pattern) thay vì snapshot đầy đủ.