public function testMemento() { $originator = new Originator(); $originator->setState("On"); $this->assertEquals("On", $originator->getState()); $memento = $originator->createMemento(); $this->assertInstanceOf('Behavioral\\Memento\\Memento', $memento); $caretaker = new Caretaker(); $caretaker->setMemento($memento); $originator->setState('Off'); $this->assertEquals("Off", $originator->getState()); $memento = $caretaker->getMemento(); $this->assertInstanceOf('Behavioral\\Memento\\Memento', $memento); $originator->restore($memento); $this->assertEquals("On", $originator->getState()); }
/* $jack = new Role(100, 30, 60, 40, 35); // 建立遊戲角色 $jack->showState(); $backup = new Role(0, 0, 0, 0, 0); $backup->setState($jack->getHp(), $jack->getMp(), // 備份目前狀態, $jack->getDex(), $jack->getAtk(), // 但是這邊暴露了實作細節 $jack->getDef()); $jack->fight(); // 開打,死掉了 $jack->showState(); $jack->setState($backup->getHp(), $backup->getMp(), // 回復之前狀態 $backup->getDex(), $backup->getAtk(), $backup->getDef()); $jack->showState(); */ // 使用Memento範例 $jack = new Role(100, 30, 60, 40, 35); // 建立遊戲角色 $jack->showState(); $caretaker = new Caretaker(); $caretaker->setMemento($jack->saveState()); // 備份目前狀態 $jack->fight(); // 開打,死掉了 $jack->showState(); $jack->recoveryState($caretaker->getMemento()); // 回復之前狀態 $jack->showState();
public static function main() { //创建目标对象 $orig = new Originator(); $orig->setState('open'); $orig->showState(); //创建备忘 $memento = $orig->createMemento(); //通过Caretaker保存此备忘 $caretaker = new Caretaker(); $caretaker->setMemento($memento); //改变目标对象的状态 $orig->setState('close'); $orig->showState(); //还原操作 $orig->restoreMemento($caretaker->getMemento()); $orig->showState(); }
private $_memento; public function getMemento() { return $this->_memento; } public function setMemento(Memento $memento) { $this->_memento = $memento; } } // client /* 创建目标对象 */ $org = new Originator(); $org->setState('open'); $org->showState(); /* 创建备忘 */ $memento = $org->createMemento(); /* 通过Caretaker保存此备忘 */ $caretaker = new Caretaker(); $caretaker->setMemento($memento); /* 改变目标对象的状态 */ $org->setState('close'); $org->showState(); $org->restoreMemento($memento); $org->showState(); /* 改变目标对象的状态 */ $org->setState('close'); $org->showState(); /* 还原操作 */ $org->restoreMemento($caretaker->getMemento()); $org->showState();
private $_state = null; public function getState() { return $this->_state; } public function setState($state) { $this->_state = $state; } public function createMemento() { return new Memento($this->_state); } public function setMemento($memento) { $this->_state = $memento->getState(); } public function display() { echo "state = " . $this->_state . "\n"; } } $objOriginator = new Originator(); $objOriginator->setState(0); $objOriginator->display(); $objCareTaker = new Caretaker(); $objCareTaker->setMemento($objOriginator->createMemento()); $objOriginator->setState(1); $objOriginator->display(); $objOriginator->setMemento($objCareTaker->getMemento()); $objOriginator->display();