设计模式之备忘录模式

1. 定义

在不暴露对象实现细节的情况下保存和恢复对象之前的状态

2. 口语化表述

在一些单机游戏中,往往存在“存档”这个概念

所谓存档,就是保存当前的游戏状态,备份游戏档案

可以继续玩这个游戏,如果发生了什么问题,想要回退游戏状态,就可以重新加载档案

这就是备忘录模式,这个模式主要解决的就是状态“备份”与“回退”问题

(下面的表述会沿用这个场景)

3. 源码示例

在Android中,备忘录模式通常用于保存和恢复Activity的状态

Activity是一个非常重要的组件,它通常包含用户输入、UI状态和其他重要数据

当Activity被系统销毁并重新创建时,它的状态会丢失,这会对用户体验产生负面影响

为了解决这个问题,Android提供了一种保存Activity状态的机制——保存实例状态(SaveInstanceState)

保存实例状态允许在Activity被销毁时保存其状态,以便在Activity重新创建时恢复状态

它基于备忘录模式实现,系统会自动为Activity创建一个Bundle对象,并在Activity被销毁时将该Bundle对象保存起来

当Activity重新创建时,系统会将保存的Bundle对象传递给Activity,并允许Activity从中恢复其状态

4. 总结

4.1 设计优缺点

  • 在不破坏对象封装情况的前提下创建对象状态快照

  • 消耗大量内存

4.2 适用场景

  • 需要创建对象状态快照来恢复其之前的状态时

5. 参考资料

[1] 备忘录设计模式 (refactoringguru.cn)

[2] Android源码分析之备忘录模式 - 掘金 (juejin.cn)

posted @ 2024-01-16 02:17  当时明月在曾照彩云归  阅读(5)  评论(0编辑  收藏  举报