zoukankan      html  css  js  c++  java
  • B9:备忘录模式 Memento

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

    UML:

    示例代码:

    class Role
    {
        private $hp;
        private $attack;
    
        public function __construct($hp, $attack)
        {
            $this->hp = $hp;
            $this->attack = $attack;
        }
    
        public function fight()
        {
            $this->hp = 0;
            echo "开始打Boos,血条到了{$this->hp}" . PHP_EOL;
        }
    
        // 创建一个备份
        public function createMemento()
        {
            return new RoleMemento($this->hp, $this->attack);
        }
    
        public function restoreMemento(RoleMemento $memento)
        {
            $this->hp = $memento->getHp();
            $this->attack = $memento->getAttack();
            echo "又恢复了, 血条到了{$this->hp};攻击力到了{$this->attack}";
        }
    }
    
    class RoleMemento
    {
        private $hp;
        private $attack;
    
        public function __construct($hp, $attack)
        {
            $this->hp = $hp;
            $this->attack = $attack;
        }
    
        public function __call($name, $args)
        {
            $name = strtolower(str_replace('get', '', $name));
            if (property_exists($this, $name)) {
                return $this->$name;
            }
        }
    }
    
    class MementoAdmin
    {
        private $memento;
    
        public function setMemento(RoleMemento $roleMemento)
        {
            $this->memento = $roleMemento;
        }
    
        public function getMemento()
        {
            return $this->memento;
        }
    }
    
    $role = new Role(5900, 1500);
    
    $admin = new MementoAdmin();
    $admin->setMemento($role->createMemento()); // 创建一个备份
    
    $role->fight();
    
    $role->restoreMemento($admin->getMemento());
    

      

    如果只有一个备忘录,可以取消备忘录管理者.

  • 相关阅读:
    推荐系统(二)
    应用高斯分布来解决异常检测问题(三)
    应用高斯分布来解决异常检测问题(二)
    应用高斯分布来解决异常检测问题(一)
    高斯(正态)分布、GDA、Mixtures of Gaussian
    主成分分析
    logistic回归
    推荐系统(一)
    基于朴素贝叶斯模型的文本分类
    K均值聚类算法
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7791699.html
Copyright © 2011-2022 走看看