Memento
Memento
Section titled “Memento”パターン一言説明
Section titled “パターン一言説明”オブジェクト内部状態をカプセル化したスナップショットとして保存・復元するパターンです。
Unity でよく使う状況
Section titled “Unity でよく使う状況”- チェックポイント復帰を実装するとき
- Undo / Redo をサポートするとき
構成要素(役割)
Section titled “構成要素(役割)”- Originator
- Memento
- Caretaker
Unity 例 (C#)
Section titled “Unity 例 (C#)”以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。
using System.Collections.Generic;using UnityEngine;
public readonly struct PlayerStateSnapshot{ public readonly Vector3 Position; public readonly int Health;
public PlayerStateSnapshot(Vector3 position, int health) { Position = position; Health = health; }}
public sealed class PlayerStateHistory{ private readonly Stack<PlayerStateSnapshot> snapshots = new();
public void Save(PlayerStateSnapshot snapshot) => snapshots.Push(snapshot); public bool TryRestore(out PlayerStateSnapshot snapshot) => snapshots.TryPop(out snapshot);}- 内部詳細を公開せずに状態保存・復元ロジックを切り離せます。
- チェックポイントや履歴系システムと相性が良いです。
- 状態が大きいとスナップショットデータも急激に増えます。
- 復元タイミングを明確にしないと同期バグが起きやすくなります。
動作ダイアグラム
Section titled “動作ダイアグラム”元の状態をスナップショットとして保存し、必要時に復元する流れです。