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

      

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

  • 相关阅读:
    flare3d_plane
    flare3d_TextureFilter
    flare3d_animation
    flare3d黄色星球案例再次解读整理
    pureMVC(二)
    flare3d_ColladaLoader
    flare3d_clone
    四则运算
    15章
    带界面的四则运算
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7791699.html
Copyright © 2011-2022 走看看