27-备忘录模式
目录
代码示例
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些。
通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。
<?php
/**
* Description of MementoDemo
* 备忘录模式
* @author jm
*/
class MementoDemo
{
//put your code here
public static function main()
{
$o = new Originator(); //Originator初始状态,状态属性on
$o->setState("On");
$o->show();
//保存状态时,由于有了很好的封装,可以隐藏Originator的实现细节
$s = new Storage();
$s->setMemento($o->createMemento());
// 改变属性
$o->setState("Off");
$o->show();
// 恢复属性
$o->setMemento($s->getMemento());
$o->show();
}
}
//原始类
class Originator
{
// 需要保存的属性,可能有多个
private $state;
public function setState($state)
{
$this->state = $state;
}
public function getState()
{
return $this->state;
}
//创建备忘录,将当前需要保存的信息导入并实例化出一个memento对象。
public function createMemento()
{
return new Memento($this->state);
}
//恢复备忘录,将memento导入并将相关数据恢复。
public function setMemento(Memento $memento)
{
$this->state = $memento->getState();
}
//显示数据
public function show()
{
echo "状态: ".$this->state."\n";
}
}
//备忘录类
class Memento
{
private $state;
//构造方法,将相关数据导入
function __construct($state)
{
$this->state = $state;
}
//获取需要保存的数据,可以多个
public function getState()
{
return $this->state;
}
}
//管理者类
class Storage
{
private $memento;
public function getMemento()
{
return $this->memento;
}
//设置备忘录
public function setMemento(Memento $memento)
{
$this->memento = $memento;
}
}
MementoDemo::main();
输出
状态: On
状态: Off
状态: On
小结
备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之前保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
本文部分收藏来自互联网,仅用于学习研究,著作权归原作者所有,如有侵权请联系删除
markdown 9ong@TsingChan