设计模式(十二):备忘录模式

2018-12-11  本文已影响1人  骑着母猪砍大象

转载请注明作者和出处https://www.jianshu.com/p/5ab0d57fab71

运行平台: Windows

php版本: php7.0

作者简介: 一个本该成为游戏职业选手却被编程耽误的程序员


备忘录模式 (Memento Pattern):

    在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。又叫做快照模式(Snapshot Pattern)或Token模式。就好似我们每次玩游戏都会存档,类似于这样的一种形式。

角色

//发起人,所需备份者
class Originator
{
    //状态
    private $state;

    //设置状态
    public function setState($state){
        $this->state = $state;
    }

    //获取状态
    public function getState(){
        echo $this->state.PHP_EOL;
    }

    //存档
    public function createMemento(){
        return new Memento($this->state);
    }

    //恢复存档
    public function restoreMemento(Memento $memento){
        $this->state =  $memento->getState();
    }
}

//备忘录角色
class Memento
{
    private $state;
    public function __construct($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;
    }
}

$originator = new Originator();
$originator->setState('满血');
$originator->getState();
$memento = new Caretaker();
$memento->setMemento($originator->createMemento());//保存状态
$originator->setState('濒血');
$originator->getState();

$originator->restoreMemento($memento->getMemento());//恢复存档
$originator->getState();

输出结果:

满血
濒血
满血

上一篇下一篇

猜你喜欢

热点阅读