Design Pattern | Memento Pattern(メメントパターン)
Mementoパターンとは?
- Mementoという英単語は記念品、形見、思い出の品という意味である。
- オブジェクト指向プログラムでUndoを行うには、インスタンスが持つ情報を保存しなければならない。
- インスタンスを復元するには、インスタンス内部の情報へ自由にアクセスできる必要がある。しかし、不注意にアクセスを許可すると、そのクラスの内部構造に依存したコードになってしまう。これをカプセル化の破壊と言う。
- Mementoパターンは、インスタンスの状態を表す役割を導入し、カプセル化を壊さずに状態(以前のインスタンス)の保存/復元を行う方式である。
- GoFのデザインパターンでは、振る舞いに関するデザインパターンに分類される。
Mementoパターンのサンプルプログラム
投げたサイコロの数に応じて所持金と所持品(果物)を変化させるプログラムである。
状況に応じて保存と復元を行う。
Class Diagram

例では、ゲーム状態を表すMementoクラス、状態を変化させるGamerクラス、条件が良いときにスナップショットを保存し、悪いときに復元するMainクラスを使う。
メリット
Mementoを使うと、オブジェクトの内部構造を公開せずに状態を保存できる。Undo、ロールバック、チェックポイント、復旧機能を実装するときに、カプセル化を保ちやすい。