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());
    

      

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

  • 相关阅读:
    javascript学习笔记1
    html的那些小小细节
    高级排序之希尔排序
    归并排序
    java 块语句 和引用类型
    扩展思维
    javase jdk 环境变量 涵义
    java 冒泡排序 二分查找 选择排序 插入排序
    kafka原理
    java web 程序---注册页面密码验证
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7791699.html
Copyright © 2011-2022 走看看