在不破坏对象的封装性的前提下,在对象之外捕获并保存该对象内部状态以便日后对象使用或者对象恢复到以前的某个状态。
// Page备忘录类 var Page = function() { // 信息缓存对象 var cache = {}; return function(page, fn) { // 判断该页数据是否在缓存中 if(cache[page]) { // 显示该页内容 showPage(page, cache[page]); // 执行成功回调函数 fn && fn(); } else { // 否则异步请求 $.post('./data/getNewsData.php', { page: page }, function(res) { // 成功返回 if(res.errNo == 0) { showPage(page, res.data); cache[page] = res.data; fn && fn(); } else { // 处理异常 } }) } } }
上面代码可以看出Page缓存器内部缓存了每次请求回来的新闻数据,这样以后如果用户想回看某页新闻数据就不需要发送不必要的请求了。
备忘录模式最主要的任务是对现有的数据或状态进行缓存,为将类某个时刻使用或恢复做准备。但是当数据量过大时,会严重占用系统提供的资源,此时对缓存器的优化是很有必要的,复用率低的数据缓存下来是不值得的。