知识卡片
从暴露状态给高层模块到引入管理员的三阶段演化
内容
识别[[备忘录模式的定义与三个角色]]必要性分三步:最初直接在场景类new多余实例保存状态, 暴露封装不够的问题;引入独立Memento类专门存储状态,避免违反单一职责;高层模块仍直接 持有Memento对象违反[[迪米特法则的定义]],于是再引入Caretaker管理员,让高层只需”创建 备份丢给管理员”和”需要时问管理员要”。发散:这印证了先解决表面封装问题、再用SOLID原则 逐层审视的模式。
参考来源
- 位置:《设计模式之禅(第2版)》第24章《备忘录模式》(源文件:_epub-src/text/part0109.html)
- 结论依据:原文依次指出直接new Boy对象保存状态"破坏了Boy类的封装"、引入Memento类后"这对迪米特法则是一个亵渎……那这个备忘录对象是我们必须要通信的朋友类吗?"、进而引入Caretaker管理员类的完整推导过程。
- 原始内容:backup变量的使用……它对于高层模块完全是多余的……应该是Boy类的职责……那我们把这个类取名就叫做备忘录……这对迪米特法则是一个亵渎……我们就需要把备忘录类再包装一下……建立一个管理类,就是管理这个备忘录。