知识卡片

多备份的备忘录支持检查点机制

普通读书笔记卡 · 1992.f

内容

基础版[[备忘录模式的定义与三个角色]]对一个发起人只能维护唯一备份,真实场景需要同时保留 多个历史快照,按”检查点”标识取用。实现是把Caretaker内部单个Memento字段改成 HashMap<String,Memento>,按标识存取。发散:每个检查点的备忘录一旦创建就常驻内存, 若不设上限容易内存溢出,这与[[备忘录的生命周期与性能注意事项]]是同一问题在多备份场景下 的放大版。

参考来源

- 位置:《设计模式之禅(第2版)》第24章《备忘录模式》(源文件:_epub-src/text/part0113.html) - 结论依据:原文说明"它对于一个确定的发起人,永远只有一份备份……在这种情况下,单一的备份就不能满足要求了,我们需要设计一套多备份的架构",给出Caretaker用HashMap按检查点标识存储多个Memento的实现,并提醒"该备份一旦产生就装入内存,没有任何销毁的意向,这是非常危险的……建议增加Map的上限"。 - 原始内容:它对于一个确定的发起人,永远只有一份备份,在这种情况下,单一的备份就不能满足要求了,我们需要设计一套多备份的架构……内存溢出问题,该备份一旦产生就装入内存……建议增加Map的上限,否则系统很容易产生内存溢出情况。