メメント パターン

Memento Pattern

Memento パターン | デザインパターン

2022年9年28日
デザインパターン Memento PHP
...

オライリージャパンによる Head First シリーズ デザインパターン(第2版)第14章 Memento パターンを、 PHPで書き直してみようという試みです。

MasterGameObject.php

 
namespace Memento;

use Memento\GameMemento;

class MasterGameObject {

  private int $gameState;

  public function getCurrentState() : GameMemento {

    $memento = new GameMemento();
    $memento->setState($this->gameState);
    return $memento;

  }

  public function restoreState(GameMemento $memento) : void {

    $this->gameState = $memento->getState();

  }

  public function getState() : int {

    return $this->gameState;

  }

  public function setState(int $gameState) {

    $this->gameState = $gameState;

  }

}
 

GameMemento.php

 
namespace Memento;

class GameMemento {

  private int $savedGameState;

  public function getState() : int {

    return $this->savedGameState;

  }

  public function setState(int $savedGameState) : void {

    $this->savedGameState = $savedGameState;

  }

}
 

index.php

 
use Memento\MasterGameObject;

$mgo = new MasterGameObject();

$mgo->setState(7);
echo '進行状況 : レベル ' . $mgo->getState() . "\n";

$saved = $mgo->getCurrentState();
echo '進行状況の保存 : レベル ' . $saved->getState() . "\n";

$mgo->setState(9);
echo '進行状況 : レベル ' . $mgo->getState() . "\n";

$saved = $mgo->getCurrentState();
echo '進行状況の保存 : レベル ' . $saved->getState() . "\n";

$mgo->setState(11);
echo '進行状況 : レベル ' . $mgo->getState() . "\n";

echo 'プレイヤーが倒されました' . "\n";
echo '進行状況をリストアします' . "\n";

$mgo->restoreState($saved);
echo '進行状況 : レベル ' . $mgo->getState() . "\n";
 

出力結果

 
  進行状況 : レベル 7
  進行状況の保存 : レベル 7
  進行状況 : レベル 9
  進行状況の保存 : レベル 9
  進行状況 : レベル 11
  プレイヤーが倒されました
  進行状況をリストアします
  進行状況 : レベル 9
 

だてめがね
...
©️ ponpocopy

とある企業で社内SEをしています。 自身の学びが誰かの為になれば、という想いで日々ブログを更新中。 PHP(CakePHP・Laravel・FuelPHP), Pyhotn(Django・Flask), C#(ASP.NET、Unity) が好きです。