Memento パターン

デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。 前回の Observerからの続き。

オブジェクトを以前の状態に(ロールバックにより)戻す能力を提供する。

クラス図

Memento PlantUML

メメントといえばクリストファーノーランですが、それは置いておいて。

自分としての理解・疑問

  • 一時的な情報の保存をクラスを使って実現しようとする形
  • キャッシュなどを使う Flyweight とかとも近いかも。
  • ここら辺は考え方という感じがして驚きがない。
<?php
    /**
     * Memento作成
     *
     * @access public
     * @param void
     * @return void
     */
    public function createMemento()
    {
        $m = new \Memento\Memento($this->money);
        // Mementoオブジェクトにフルーツを保存する
        foreach ($this->fruits as $f) {
            if ((strpos($f, 'おいしい') === 0)) {
                $m->addFruit($f);
            }
        }
        return $m;
    }