undo-redo需要备忘录模式和命令模式做支撑,之前有学习过了command模式和memento模式的一些基本知识。这里要结合两个模式实现一个undo-redo操作的模块,巩固所学的知识。
系统框图:
命令分发控制器主要有四个任务:
1.系统初始化,加载系统配置参数并把这些数据缓存起来,这些应用程序级别的配置参数可以使用序列化机制,把数据缓存而不用每次去读取文件,加快访问效率。
2.根据前端请求,收集参数生成一个请求(Request)。
3.把请求映射到具体业务逻辑的命令模块(Command)。
4.执行操作并把结果返回给前端视图。
业务逻辑层根据传入的context对象可以获取执行参数,执行完毕后还可以把执行结果通过context对象返回给上一层。
命令分发控制器的实现:
class Controller{
private function __construct() {}
static function run(){
$instance = new Controller();
$instance->init();
$instance->handleRequest();
}
function init(){
$application
= \base\ApplicationHelper::instance();
$application->system_init();
}
function handleRequest(){
$request = new \controller\Request();
$cmd_r = new \command\CommandResolver();
$cmd = $cmd_r->get_command($request);
$cmd->execute($request);
}
}
通过把构造函数声明为private,controller为一个单例。
对于类似PHP这样的解释型的语言,要实现undeo/redo机制,必须用到一些缓存机制(session)来保存