备忘录模式

2017-05-29  本文已影响4人  散装咖啡
/**
       memento模式
       在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这
个状态,这样以后就可以将该对象恢复到保存的状态
*/
    class Memento
    {
        private $_state = null;
        
        public function __construct($state)
        {
            $this->_state = $state;
        }
        
        public function getState()
        {
            return $this->_state;
        }
    }

    class Caretaker
    {
        private $_memento = null;
        
        public function getMemento()
        {
            return $this->_memento;
        }
        
        public function setMemento($memento)
        {
            $this->_memento =$memento;
        }
    }

    class Originator
    {
        private $_state = null;
        
        public function getState()
        {
            return $this->_state;
        }
        
        public function setState($state)
        {
            $this->_state = $state;
        }
        
        public function createMemento()
        {
            return new Memento($this->_state);
        }
        
        public function setMemento($memento)
        {
            $this->_state = $memento->getState();
        }
        
        public function display()
        {
            echo "state = " . $this->_state . "<br/>";
        }
    }

    $objOriginator = new Originator();
    $objOriginator->setState(0);
    $objOriginator->display();

    $objCareTaker=new CareTaker();
    $objCareTaker->setMemento($objOriginator->createMemento());

    $objOriginator->setState(1);
    $objOriginator->display();
    $objOriginator->setMemento($objCareTaker->getMemento());
    $objOriginator->display();

参考文章 https://wenku.baidu.com/view/b4c78b4702768e9951e738fb.html

上一篇 下一篇

猜你喜欢

热点阅读