备忘录模式
备忘录模式提供了一种方法,可以在不暴露对象内部状态的情况下捕获和恢复对象的状态。备忘录模式的关键是将对象的状态保存到备忘录对象中,以便在需要时恢复对象的状态。
结构
备忘录模式示意图
备忘录模式中,备忘录对象存储了原发器(Originator)对象的内部状态。客户端可以通过负责人(Caretaker)对象保存和恢复原发器对象的状态,负责人对象仅能通过受限的接口访问备忘录对象,确保无法修改备忘录对象的内容。
在实际实现中,备忘录模式分为嵌套类实现、中间接口实现和严格封装实现三种。
嵌套类实现
备忘录模式嵌套类实现示意图
嵌套类实现将备忘录类嵌套在原发器类中,使得备忘录类只能被原发器类访问,确保了备忘录对象的内容不会被修改。备忘录类通常是仅初始化一次后不再修改的不可变对象。
负责人的职责是确认何时和为何需要保存和恢复原发器的状态,但实际的备忘录对象的创建和恢复是由原发器类完成的。
中间接口实现
备忘录模式中间接口实现示意图
中间接口模式适用于不支持嵌套类的语言,将备忘录类和原发器类分离,强制负责人通过受限接口来访问备忘录对象。
原发器通过具体备忘录类提供的接口访问备忘录对象,仍然负责创建和恢复备忘录对象。这种方法的缺点是原发器对象对备忘录对象的访问可能会变得更加复杂,如果简单地将备忘录对象的属性设为公有,则可能存在安全问题。