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

      

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

  • 相关阅读:
    ie6动态创建iframe无法显示内容的bug
    时间字符串解析
    自定义时间格式转换代码
    MySql存储过程异常处理示例
    解析数字签名的Substring结构
    自动输出类的字段及值
    深复制与浅复制的实现
    ie版本过低提示升级ie的示例
    Web安全攻防TCP/IP安全篇
    不同网段相互通信实验
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7791699.html
Copyright © 2011-2022 走看看