在应用程序设计过程中,一些具体操作需要能够支持撤销(undo),例如最近在写的一个文件管理系统。文件的一些基本操作如:rename、copy、cut等,需要支持undo、redo操作来提供更好的用户体验。总所周知,undo、redo操作需要两个模式支撑:备忘录模式(memento)保存对象操作数据状态、命令模式(command)封装用户请求。结合起来可以提供良好的撤销、重做操作。命令模式可以参考上面一篇文章点击打开链接.下面主要说说备忘录模式的实现,如有错误,不令赐教。
备忘录模式主要有3个参与者:
a.保存状态信息的备忘录对象(Memento)
b.产生状态信息的源发器(Originator)
c.备忘录对象的管理器(CareTaker)
源发器提供两个对外的接口:
create_memento(); //保存对象状态信息创建一个备忘录返回 set_memento(Memento $mem); //根据传入的备忘录获取状态信息,恢复状态
set_state(State $state); //设备备忘录当前状态
get_state(); //获取备忘录当前状态class Memento {
private $state;
public function get_state(){
return $this->state;
}
public function set_state(State $state){
$this->state = clone $state;
}
}源发器实现:
class Originator{
private $state;
function _construct(){
$this->state = new State();
$this->state->set('action', 'create originator');
}
function do_action1(){
$this->state->set('action', 'do_action 1');
}
function do_action2(){
$this->state->set('action', 'do_action 2');
}
function create_memento(){
$mem = new Memento();
$men->set_state($this->state);
return $mem;
}
function set_memento(Memento $mem){
$this->state = $mem->get_state();
}
function dump(){
echo $this->state->get('action') . "\n";
}
}class State{
private $values = array();
public function set($key, $value){
$this->values[$key] = $value;
}
public function get($key){
if(isset($this->values[$key])){
return $this->values[$key];
}
return null;
}
}
class CareTaker{
private $command;
function __construct($cmd="Originator1"){
$this->command = $cmd;
}
private function do_execute(){
switch($this->command){
case 'Originator1':{
$action = new Originator();
$mem1 = $action->create_memento();
$action->dump();
$action->do_action1();
$mem2 = $action->create_memento();
$action->dump();
$action->do_action2();
$mem3 = $action->create_memento();
$action->dump();
//状态恢复
$action->set_memento($mem2);
$action->dump();
$action->set_memento($mem1);
$action->dump();
}
}
}
} The end.
以上就介绍了浅析备忘录模式,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号