2.17. 备忘录模式(Memento )
三个角色
(我更喜欢叫他 快照模式 或者 备份模式)
发起者
: 需要备份的类,由他发起创建快照快照
: 专门存储的类管理者
: 不需要 管理者
也可以,为了有个统一的入口,还是有比较好
uml
代码实现
<?php
//发起人,所需备份者
Class Post{
public $title = '标题1';
public $content = '内容1';
public function createTitleMemento()
{
return (new TitleMemento($this->title));
}
public function createContentMemento()
{
return (new ContentMemento($this->content));
}
}
//存储者 内容备忘录
class ContentMemento {
private $content = '';
public function __construct($content)
{
$this->content = $content;
}
public function getContent()
{
return $this->content;
}
}
//存储者 标题备忘录
class TitleMemento {
private $title;
public function __construct($title)
{
$this->title = $title;
}
public function getTitle()
{
return $this->title;
}
}
//管理者
class PostManage{
private $memento;
public function getmemento(){
return $this->memento;
}
public function setmemento($memento){
$this->memento = $memento;
}
}
$postManage = new PostManage();
$post = new Post();
$titleMemento = $post->createTitleMemento(); //标题快照
$contentMemento = $post->createContentMemento(); //内容快照
echo $post->title = '标题'.PHP_EOL;
echo $post->content = '内容'.PHP_EOL;
$postManage->setmemento($titleMemento);
echo "原标题:" . $postManage->getmemento()->getTitle().PHP_EOL;
$postManage->setmemento($contentMemento);
echo "原内容:". $postManage->getmemento()->getContent().PHP_EOL;
运行结果
标题
内容
原标题:标题1
原内容:内容1