2.17. 备忘录模式(Memento )

未匹配的标注

三个角色

(我更喜欢叫他 快照模式 或者 备份模式)

发起者 : 需要备份的类,由他发起创建快照
快照 : 专门存储的类
管理者 : 不需要 管理者 也可以,为了有个统一的入口,还是有比较好

uml

备忘录模式(Memento )

代码实现


<?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

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~