码迷,mamicode.com
首页 > 其他好文 > 详细

B9:备忘录模式 Memento

时间:2017-11-06 11:29:59      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:echo   str   mem   arp   public   img   color   技术   width   

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

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

  

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

B9:备忘录模式 Memento

标签:echo   str   mem   arp   public   img   color   技术   width   

原文地址:http://www.cnblogs.com/itfenqing/p/7791699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!