Mementoパターンの解説

Mementoパターンとは、オブジェクトの状態を保存し、後からその状態に戻せるようにするデザインパターンだ。これにより、オブジェクトの状態を保存して、必要なときに復元することができる。

たとえば、ゲームでセーブポイントを作って、後からその時点の状態に戻ることができるような仕組みで使える。

では、サンプルコードを一緒に見ていこう。

解説

Step 1: ゲームの状態を保存するクラスを作る

まず、ゲームの進行状況を保存するための「Memento」クラスを作ろう。これは、ゲームの状態(例えば、レベルやスコア)を保存する役割を持つ。


// ゲームの状態を保存するMementoクラス
class GameMemento {
  constructor(level, score) {
    this.level = level;
    this.score = score;
  }
}
      

Step 2: ゲームの状態を管理するクラスを作る

次に、ゲームの進行状況を管理するクラスを作る。このクラスは、状態を保存し、必要に応じて以前の状態に戻すことができるようにする。


// ゲームの進行を管理するクラス
class Game {
  constructor() {
    this.level = 1;
    this.score = 0;
  }

  // ゲームの状態を保存する
  save() {
    return new GameMemento(this.level, this.score);
  }

  // 保存された状態に戻す
  restore(memento) {
    this.level = memento.level;
    this.score = memento.score;
  }

  // ゲームの状態を更新する
  play(level, score) {
    this.level = level;
    this.score = score;
  }

  displayStatus() {
    console.log(`レベル: ${this.level}, スコア: ${this.score}`);
  }
}
      

Step 3: ゲームのセーブとロード機能を使う

最後に、ゲームを進めながらセーブとロード機能を使ってみよう。途中で状態を保存し、後でその状態に戻すことができる。


// ゲームのインスタンスを作成
const game = new Game();

// ゲームを進める
game.play(5, 100);
game.displayStatus(); // レベル: 5, スコア: 100

// ゲームの状態をセーブする
const savedGame = game.save();

// さらにゲームを進める
game.play(10, 200);
game.displayStatus(); // レベル: 10, スコア: 200

// ゲームをセーブした状態に戻す
game.restore(savedGame);
game.displayStatus(); // レベル: 5, スコア: 100
      

Mementoパターンの重要なポイント

これでMementoパターンの解説は終わりだ。
このパターンを使うと、オブジェクトの状態を簡単に保存・復元できるため、セーブ機能や元に戻す機能を実装する際に便利だ。