|
| 1 | +import { Originator } from '../src/Originator.js' |
| 2 | +import { Caretaker } from '../src/Caretaker.js' |
| 3 | + |
| 4 | +export function test() { |
| 5 | + /* |
| 6 | + * 备忘录模式是在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 |
| 7 | + * 先声明发起人Originator,再声明负责人Caretaker,发起人生成备忘录Memento |
| 8 | + * 通过负责人则保存备忘录历史记录,读取备忘录由负责人来完成。 |
| 9 | + */ |
| 10 | + const originator = new Originator() |
| 11 | + const careTaker = new Caretaker() |
| 12 | + // 发起人产生一个状态 |
| 13 | + originator.setState('state1') |
| 14 | + // 覆盖了状态,那么前面的状态未保存 |
| 15 | + originator.setState('state2') |
| 16 | + // 发起人生成备忘录,一般添加时直接保存即可 |
| 17 | + const memento = originator.saveMemento() |
| 18 | + // 负责人保添加备忘录历史记录 |
| 19 | + careTaker.add(memento) |
| 20 | + |
| 21 | + // 直接生成备忘录并添加到负责人的备忘录列表 |
| 22 | + originator.setState('state3') |
| 23 | + careTaker.add(originator.saveMemento()) |
| 24 | + originator.setState('state4') |
| 25 | + careTaker.add(originator.saveMemento()) |
| 26 | + |
| 27 | + console.log('发起人当前的状态: ' + originator.getState()) |
| 28 | + |
| 29 | + // 发起人通过负责人那里取出状态 |
| 30 | + originator.restoreMemento(careTaker.get(0)) |
| 31 | + console.log('第一个保存的状态: ' + originator.getState()) |
| 32 | + originator.restoreMemento(careTaker.get(1)) |
| 33 | + console.log('第二个保存的状态: ' + originator.getState()) |
| 34 | + |
| 35 | + // 遍历全部备忘录 |
| 36 | + for (let i = 0; i < careTaker.getMementoList().length; i++) { |
| 37 | + // 外部一般不直接访问备忘录里面的状态,而是逐个恢复备忘录,再取出状态来 |
| 38 | + originator.restoreMemento(careTaker.get(i)) |
| 39 | + console.log('state: ' + i + ')' + originator.getState()) |
| 40 | + } |
| 41 | +} |
| 42 | + |
| 43 | +// 执行测试 |
| 44 | +;(function () { |
| 45 | + console.log('test start:') |
| 46 | + test() |
| 47 | +})() |
| 48 | + |
| 49 | +/** |
| 50 | + // use ems |
| 51 | + jarry@jarrys-MacBook-Pro ts % ts-node-esm test/test.ts |
| 52 | + // or tsc and node run |
| 53 | +jarry@jarrys-MacBook-Pro ts % tsc |
| 54 | +jarry@jarrys-MacBook-Pro ts % node test/test.js |
| 55 | +test start: |
| 56 | +Originator::saveMemento() [state = state2] |
| 57 | +Memento::Memento() [state = state2] |
| 58 | +Caretaker::add() [memento = Memento] |
| 59 | +Originator::saveMemento() [state = state3] |
| 60 | +Memento::Memento() [state = state3] |
| 61 | +Caretaker::add() [memento = Memento] |
| 62 | +Originator::saveMemento() [state = state4] |
| 63 | +Memento::Memento() [state = state4] |
| 64 | +Caretaker::add() [memento = Memento] |
| 65 | +发起人当前的状态: state4 |
| 66 | +第一个保存的状态: state2 |
| 67 | +第二个保存的状态: state3 |
| 68 | +state: 0)state2 |
| 69 | +state: 1)state3 |
| 70 | +state: 2)state4 |
| 71 | +*/ |
0 commit comments