备忘录模式

备忘录模式提供了一种对象状态撤销实现机制,当系统中某一个对象需要恢复到某一历史状态时可以使用备忘录模式进行设计。

picture 1
picture 2
  • 发起人,也就是要备份的目标类,他提供两个方法:

    • 恢复备忘录

    • 创建备忘录

  • 备忘录,是发起人的备忘角色

  • 看护人,用于管理备忘录,比如查询备忘录、删除备忘录、保存备忘录

  • state,代表当前状态的状态字段

在业务系统中,发起人通常是业务实体,而备忘录角色通常是备份表的实体,而看护人通常就是负责写入备份的实体到备份表中。

备忘录模式的优点:

  1. 提供了一种状态恢复的实现机制,使得用户可以方便的回到一个特定的历史步骤,当新的状态无效或者存在问题的时候,可以使用暂时存储起来的备忘录将状态复原.

  2. 备忘录实现了对信息的封装,一个备忘录对象是一种发起者对象状态的表示,不会被其他代码所改动.备忘录保存了发起者的状态,采用集合来存储备忘录可以实现多次撤销的操作

备忘录模式的缺点:

  1. 资源消耗过大,如果需要保存的发起者类的成员变量比较多, 就不可避免的需要占用大量的存储空间,每保存一次对象的状态,都需要消耗一定系统资源

备忘录模式使用场景:

  1. 需要保存一个对象在某一时刻的状态时,可以使用备忘录模式.

  2. 不希望外界直接访问对象内部状态时.

Java 实现

使用备忘录模式:

Java 投骰子游戏

设计一个收集回国和获取金钱数的投骰子游戏,游戏规则如下:

  1. 游戏玩家通过投骰子来决定下一个状态

  2. 当点数为1,玩家金钱增加

  3. 当点数为2,玩家金钱减少

  4. 当点数为6,玩家会获得水果

  5. 当金钱消耗到一定程度,就能恢复初始状态

Player玩家类,只要玩家的金币还够,就会一直进行游戏,在该类中会设置一个createMemento方法,其作用是保存当前玩家状态.还会包含一个restore撤销方法,相当于复活操作:

测试: 由于引入了备忘录模式,可以保存某个时间点的玩家状态,这样就可以对玩家进行复活操作.

最后更新于

这有帮助吗?