备忘录模式概念及其解释
备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
它在实际开发中用在word、excel等软件的撤销恢复功能、缓存上一页内容、游戏中存档等等
使用场景
备忘录模式优缺点
优点
- 在不破坏对象封装情况的前提下创建对象状态快照
- 通过让负责人维护原发器状态历史记录来简化原发器代码
缺点
备忘录模式相关角色
发起人(Originator):负责创建一个备忘录,记录自身需要保存的状态,具备状态回滚功能
备忘录(Memento):用于存储Originator的内部状态,可以防止Originator以外的对象访问
备忘录管理员(Caretaker):负责存储。提供管理员备忘录,无法对备忘录内容进行操作和访问
备忘录模式的实际应用
保存对象状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| class Memo { constructor(content){ this.content = content; } get() { return this.content; } }
class Caretaker { constructor(){ this.list = []; } add(memo){ this.list.push(memo) } get(index){ return this.list[index]; } }
class Originator { constructor(){ this.content = null; } setContent(content){ this.content = content; } getContent(content){ return this.content; } saveContentByMemo(){ return new Memo(this.content); } getContentByMemo(memo){ this.content = memo.get(); } }
let originator = new Originator(); let caretaker = new Caretaker(); originator.setContent('这是demo1'); caretaker.add(originator.saveContentByMemo()); originator.setContent('这是demo2'); caretaker.add(originator.saveContentByMemo()); originator.setContent('这是demo3'); console.log(originator.getContent()); originator.getContentByMemo(caretaker.get(1)); console.log(originator.getContent()); originator.getContentByMemo(caretaker.get(0)); console.log(originator.getContent()); </script>
|
分页时数据缓存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
let pageHandle = function() { let cache = {};
return function(page, fn) { if (cache[page]) {
showPage(page, cache[page]); fn && fn(); } else { $.post('xxx', { page: page }, function(res) { if (res.success) { showPage(page, res.data); cache[page] = res.data; fn && fn(); } else { } }); } } };
|