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();
private $memento; public function get_memento() { return $this->memento; } public function set_memento($memento) { $this->memento = $memento; } } //客户端,即测试 $o = new Originator(); $state = 'On'; $o->set_state($state); $o->show(); $c = new Caretaker(); $memento = $o->create_memento(); //$o2 = new Originator(); $state2 = '2'; $o->set_state($state2); $o->show(); $memento2 = $o->create_memento(); $c->set_memento($memento); $c->set_memento($memento2); $state = 'Off'; $o->set_state($state); $o->show(); //var_dump($memento2); //$memento = $c->get_memento(); $o->set_memento($memento); $o->show();
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();
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(); }
public function __construct() { $this->first = 'first'; $this->second = 'second'; $this->ct = new Caretaker(); $this->orig = new Originator(); $this->orig->setState($this->first); $this->ct->addMemento($this->orig->createMemento()); $this->orig->setState($this->second); $this->ct->addMemento($this->orig->createMemento()); $this->orig->setMemento($this->ct->getMemento(1)); echo $this->orig->state; }
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();