码迷,mamicode.com
首页 > 其他好文 > 详细

2018/12/10《大话设计模式》【备忘录模式】

时间:2018-12-10 17:56:57      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:print   pre   ima   一个   ati   https   nbsp   复杂   分享   

 

1:为什么要使用备忘录模式?

  - 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

  - 在平常的需要备忘/快照的模式中,经常需要客户端来进行操作来进行复杂操作保存等逻辑。

  - 哎~,这个越说越晦涩,就这么说吧,不用修改基类,你想保存这个对象之前的状态,就是用这个就好了

  - 就类似备忘录一样

 

2:备忘录模式的应用场景?

  - 在《大话涉及模式中也指出》

技术分享图片

  - 适合功能比较复杂历史功能这样的类,或者简单存储的属性

 

3:备忘录模式的简单实现

<?php
/**
 * 备忘录模式
 * 这里的状态模式可以使用 数据库/Redis 等
 */
// 发起人
class Originator 
{
    public $state;

    // 创建备忘录
    public function createMemento($state)
    {
        return (new Memento($state));
    }
 
     // 恢复备忘录
    public function setMemento(Memento $memento)
    {
        $this->state = $memento->state;
    }

    // 展示数据
    public function show()
    {
        print_r($this->state);
    }
}
 
// 备忘录
class Memento
{
    public function __construct($state)
    {
        $this->state = $state;
    }
}
 
// 客户端使用
class Client
{
    public static function main()    
    {
       $Originator = new Originator();

       // 当前状态
       $Originator->state = [能量 => 100, 魔法 => 100];

       // 保存当前状态
       $Memento = new Memento($Originator->state);
       $Originator->createMemento($Memento);

       // 打怪 - 能量减低
       $Originator->state = [能量 => 20, 魔法 => 10];

       // 当前状态
       $Originator->show();

       // 死亡 - 恢复备忘
       $Originator->setMemento($Memento);
       $Originator->show();

    }
}
 
Client::main($argv);

 

4:GITHUB

  github

 

2018/12/10《大话设计模式》【备忘录模式】

标签:print   pre   ima   一个   ati   https   nbsp   复杂   分享   

原文地址:https://www.cnblogs.com/25-lH/p/10096896.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!