知识卡片
Clone方式的备忘录融合发起人与备忘录角色
内容
[[备忘录模式的定义与三个角色]]可借助[[Cloneable只是标记接口需覆写clone才真正可拷贝]] 简化:Originator实现Cloneable,createMemento直接返回clone(),无需独立Memento类, 发起人自身兼具备忘录功能,甚至可精简掉Caretaker。发散:这看似违背”状态保存在对象 之外”的原始定义,属合理弥补,代价是需考虑[[浅拷贝与深拷贝的区别及String的特殊性]]。
参考来源
- 位置:《设计模式之禅(第2版)》第24章《备忘录模式》(源文件:_epub-src/text/part0112.html)
- 结论依据:原文展示Originator实现Cloneable、createMemento直接返回clone()结果的简化方案,并进一步把Caretaker也精简掉、用内部backup字段自行管理备份,同时提醒"Clone方式的备忘录模式适用于较简单的场景",需考虑深浅拷贝问题。
- 原始内容:发起人角色只要实现Cloneable就成……这和备忘录模式的定义不相符,它定义是"在该对象之外保存这个状态",而你却把这个状态保存在了发起人内部……我们把它弥补回来……Clone方式的备忘录模式适用于较简单的场景。