《设计模式 - 备忘录模式》
1:为什么要使用备忘录模式?
- 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
- 在平常的需要备忘/快照的模式中,经常需要客户端来进行操作来进行复杂操作保存等逻辑。
- 哎~,这个越说越晦涩,就这么说吧,不用修改基类,你想保存这个对象之前的状态,就是用这个就好了
- 就类似备忘录一样
2:备忘录模式的应用场景?
- 在《大话涉及模式中也指出》
- 适合功能比较复杂的历史功能这样的类,或者简单存储的属性。
3:备忘录模式的简单实现
<?php /** * 备忘录模式 * 这里的状态模式可以使用 数据库/Redis 等 */ // 发起人 class Originator { public $state; // 创建备忘录 public function createMemento($state) { return (new Memento($state)); } // 恢复备忘录 public function setMemento(Memento $memento) { $this->state = $memento->state; } // 展示数据 public function show() { print_r($this->state); } } // 备忘录 class Memento { public function __construct($state) { $this->state = $state; } } // 客户端使用 class Client { public static function main() { $Originator = new Originator(); // 当前状态 $Originator->state = ['能量' => '100', '魔法' => '100']; // 保存当前状态 $Memento = new Memento($Originator->state); $Originator->createMemento($Memento); // 打怪 - 能量减低 $Originator->state = ['能量' => '20', '魔法' => '10']; // 当前状态 $Originator->show(); // 死亡 - 恢复备忘 $Originator->setMemento($Memento); $Originator->show(); } } Client::main($argv);
4:GITHUB