设计模式-备忘录模式

mac2024-01-28  34

参考:https://blog.csdn.net/lovelion/article/details/7526759

定义

备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象,这样可以在以后将这个对象恢复到原先的状态。是一个对象行为型设计模式。别名为Token

UML

伪代码

/** * 原发器 */ class Originator { private $state; public function __construct($state){ $this->state = $state; } public function createMemento() { return new Memento($this); } public function restoreMemento(Memento $memento) { $this->state = $memento->getState(); } public function setState($state) { $this->state = $state; } public function getState() { return $this->state; } } /** * 备忘录 */ class Memento { private $state; public function __construct (Originator $o) { $this->state = $o->getState(); } public function setState($state) { $this->state = $state; } public function getState() { return $this->state; } } /** * 负责人 */ class CareTaker { private $memento; public function setMemento(Memento $memento) { $this->memento = $memento; } public function getMemento() { return $this->memento; } } /** * Client */ spl_autoload_register('auto_load_function', true, true); $originator = new Originator('状态1'); $memento = $originator->createMemento(); // var_dump($memento);exit(); $caretaker = new CareTaker(); $caretaker->setMemento($memento); $originator->setState('状态2'); var_dump($originator); //恢复 $originator->restoreMemento($caretaker->getMemento()); var_dump($originator);exit(); function auto_load_function($class) { $class = str_replace("\\", '/', $class); require_once "./{$class}.php"; }

优缺点

优点:

能够对临时状态进行保存,提供了一种恢复的功能不对原有的原发器的封装进行破坏。备忘录类能够保存原发器的全部或部分信息;负责人只对备忘录进行管理,不需要了解原发器的细节。

缺点:

比较浪费内存,备忘录类需要保存原发器的全部或部分信息。

使用场景

当需要保存临时状态信息的时候。

最新回复(0)