本文目录导读:

是的,PHP中的备忘录模式(Memento Pattern)专门用于保存和恢复对象的内部状态,而不会暴露对象的实现细节。
核心作用
备忘录模式的主要目的就是在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便将来可以将该对象恢复到之前保存的状态。
基本结构
<?php
// 1. 发起人(Originator)- 需要保存状态的对象
class Editor {
private $content = '';
private $title = '';
public function write($text) {
$this->content .= $text;
}
// 创建备忘录:保存当前状态
public function save(): Memento {
return new Memento($this->content, $this->title);
}
// 从备忘录恢复状态
public function restore(Memento $memento) {
$this->content = $memento->getContent();
$this->title = $memento->getTitle();
}
public function getContent() {
return $this->content;
}
public function setTitle($title) {
$this->title = $title;
}
}
// 2. 备忘录(Memento)- 存储状态
class Memento {
private $content;
private $title;
private $timestamp;
public function __construct($content, $title) {
$this->content = $content;
$this->title = $title;
$this->timestamp = time();
}
// 只对 Originator 暴露的接口
public function getContent() {
return $this->content;
}
public function getTitle() {
return $this->title;
}
public function getTimestamp() {
return $this->timestamp;
}
}
// 3. 负责人(Caretaker)- 管理备忘录
class History {
private $mementos = [];
public function push(Memento $memento) {
$this->mementos[] = $memento;
}
public function pop(): ?Memento {
return array_pop($this->mementos);
}
}
// 使用示例
$editor = new Editor();
$history = new History();
$editor->setTitle("草稿1");
$editor->write("第一行文字");
$history->push($editor->save()); // 保存状态
$editor->write("第二行文字");
$history->push($editor->save()); // 保存状态
$editor->write("第三行文字");
echo $editor->getContent(); // 输出: 第一行文字第二行文字第三行文字
// 撤销操作
$editor->restore($history->pop());
echo $editor->getContent(); // 输出: 第一行文字第二行文字
$editor->restore($history->pop());
echo $editor->getContent(); // 输出: 第一行文字
?>
关键特点
- 状态保存:确实保存对象的全部或部分状态
- 封装性保护:只有 Originator 可以访问备忘录的内部数据
- 恢复机制:提供
restore()方法恢复历史状态 - 无限历史:可以保存多个时间点的状态快照
与普通快照的区别
| 特性 | 备忘录模式 | 普通对象克隆 |
|---|---|---|
| 封装性 | 保护内部结构 | 可能暴露细节 |
| 选择性保存 | 可选择保存部分状态 | 克隆整个对象 |
| 历史管理 | 可保存多个版本 | 通常只克隆当前 |
| 恢复复杂度 | 简单调用restore | 需手动赋值 |
典型应用场景
- 撤销/重做功能(文本编辑器、图像处理)
- 事务回滚(数据库操作)
- 游戏存档(保存玩家进度)
- 表单数据恢复(Web应用)
所以答案是明确的:PHP备忘录模式的核心功能就是保存和恢复对象的状态,这是该设计模式存在的根本目的。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播