zoukankan      html  css  js  c++  java
  • 《设计模式

    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

  • 相关阅读:
    springboot与docker
    Docker入门笔记(Centos7)
    记录VUE-CLI项目创建及初始化相关
    centos下安装mysql5.6
    GitLab权限介绍
    属性文件操作之Properties与ResourceBundle
    Shell入门基础
    JavaScript基础的记录
    Java基本排序算法
    解读闭包,这次从ECMAScript词法环境,执行上下文说起
  • 原文地址:https://www.cnblogs.com/25-lH/p/10096896.html
Copyright © 2011-2022 走看看