【めめんとぱたーん】

Mementoパターン とは?

💡 過去に戻れる「セーブデータ」をプログラムで作る仕組み
📌 このページのポイント
Mementoパターン — Undo/Redo の仕組み Originator (状態を持つオブジェクト) Memento (状態スナップショット) Caretaker (履歴を管理) save store restore(Undo) 履歴スタックのイメージ 状態① 状態② 状態③ 現在の状態
Mementoパターン:Originator・Memento・Caretakerの3役割でUndo/Redoを実現する
ひよこ ひよこ

Mementoパターンって何?メメントって映画みたいな名前だね!

ペンギン先生 ペンギン先生

映画のメメントは記憶を失う話だけど、このパターンはむしろ逆で「状態をしっかり覚えておく」仕組みだよ。オブジェクトの内部状態をスナップショットとして保存して、後でそこに戻れるようにするデザインパターンなんだ。

ひよこ ひよこ

スナップショットって写真みたいなもの?

ペンギン先生 ペンギン先生

まさにその通り!ある瞬間の状態を「写真」として撮っておくイメージだよ。テキストエディタで文字を打ってCtrl+Zで元に戻せるよね?あれがMementoパターンの典型的な使い道なんだ。

ひよこ ひよこ

じゃあゲームのセーブ機能もそれなんだね!

ペンギン先生 ペンギン先生

そう!ゲームのセーブポイントもMementoパターンの考え方と同じだよ。パターンの構造としては3つの役割があって、状態を持つ「Originator」、状態のスナップショットを保持する「Memento」、スナップショットを管理する「Caretaker」に分かれるんだ。

ひよこ ひよこ

3つに分けることで何かいいことあるの?

ペンギン先生 ペンギン先生

オブジェクトカプセル化を保ったまま状態を保存できることが一番の利点だよ。Mementoオブジェクトは内部状態を外部から直接触らせないようにして、Originatorだけが読み書きできる設計になっているんだ。

ひよこ ひよこ

なるほど!でも状態をたくさん保存したらメモリがすごく使われそう…

ペンギン先生 ペンギン先生

鋭い指摘だよ!Mementoパターンの注意点の一つがまさにそれで、スナップショットの数が増えるとメモリ消費が大きくなる。だから差分だけを保存したり、保存できる履歴数に上限を設けたりして工夫することが多いんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Mementoパターン」って出てきたら「オブジェクトの状態をスナップショット保存してUndo/Redoを実現する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Memento Pattern」 = 記念品パターン
💬 Mementoはラテン語で「覚えておけ」を意味する言葉。状態の「記念品(スナップショット)」を残すイメージから名付けられたデザインパターンだよ。
← 用語集にもどる