参考:https://blog.csdn.net/lovelion/article/details/7526759
定义
备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象,这样可以在以后将这个对象恢复到原先的状态。是一个对象行为型设计模式。别名为Token
UML
伪代码
class Originator
{
private $state;
public function __construct($state){
$this->state = $state;
}
public function createMemento()
{
return new Memento($this);
}
public function restoreMemento(Memento
$memento)
{
$this->state = $memento->getState();
}
public function setState($state)
{
$this->state = $state;
}
public function getState()
{
return $this->state;
}
}
class Memento
{
private $state;
public function __construct
(Originator
$o)
{
$this->state = $o->getState();
}
public function setState($state)
{
$this->state = $state;
}
public function getState()
{
return $this->state;
}
}
class CareTaker
{
private $memento;
public function setMemento(Memento
$memento)
{
$this->memento = $memento;
}
public function getMemento()
{
return $this->memento;
}
}
spl_autoload_register('auto_load_function', true, true);
$originator = new Originator('状态1');
$memento = $originator->createMemento();
$caretaker = new CareTaker();
$caretaker->setMemento($memento);
$originator->setState('状态2');
var_dump($originator);
$originator->restoreMemento($caretaker->getMemento());
var_dump($originator);exit();
function auto_load_function($class)
{
$class = str_replace("\\", '/', $class);
require_once "./{$class}.php";
}
优缺点
优点:
能够对临时状态进行保存,提供了一种恢复的功能不对原有的原发器的封装进行破坏。备忘录类能够保存原发器的全部或部分信息;负责人只对备忘录进行管理,不需要了解原发器的细节。
缺点:
比较浪费内存,备忘录类需要保存原发器的全部或部分信息。
使用场景
当需要保存临时状态信息的时候。