专业的编程技术博客社区

网站首页 > 博客文章 正文

设计模式——备忘录模式(备忘录界面设计)

baijin 2024-10-01 07:33:10 博客文章 10 ℃ 0 评论

看一个游戏角色状态恢复的需求:游戏角色有攻击力和防御力,在大战Boss之前保存自己的自身状态(攻击力和防御力),大战Boss之后攻击力和防御力都下降,从备忘录状态恢复到战前状态。

传统方案(类图)如下:

传统方案带来的问题:

1) 一个对象对应一个保存状态的对象,这样当我们系统的对象很多时,不利于管理,开销也很大。

2) 传统的方式是作一个简单的备份,另外new出一个对象来,再把需要备份的数据放到这个对象,但这是暴露了对象内部的细节。

3) 解决方案:备忘录模式。

备忘录模式(Memento Pattern)介绍:

1. 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后可以将这个状态恢复到原先保存的状态。

2. 可以这样理解备忘录模式:在现实生活中,备忘录是用来记录某些要去做的事情,或者记录已经达成共同意见的场景,以防忘记了。而且在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录对象的某种状态或者某些数据,当要做回退时,可以从备忘录对象中,获取原来的数据进行恢复操作。

3. 备忘录模式也是属于行为模式。

备忘录模式类图:

对原理类图的说明即访问者模式的角色和职责:

1) Originator:需要保存状态的对象。

2) Memento:备忘录对象,负责保存好记录,即Originator的内部状态。

3) Caretaker:守护者对象,负责保存和管理多个备忘录对象。而且是以集合的形式。说明:如果希望保存多个Originator对象不同时期的状态也可以。只需要用HashMap<String,集合>的方式保存。

备忘录模式注意事项和细节:

1. 给用户提供了一种可以恢复状态的机制,可以使得用户很方便的回到某个历史状态。

2. 实现了信息的封装,使得用户不需要关心状态的保存细节。

缺点:

1) 如果类的成员变量比较多,势必会占用较多的资源,而且每次保存都会消耗内存,这个一定要注意。

适用场景:

1. 后悔药;

2. 打游戏时的存档;

3. windows中的ctrl+z。

为了节约内存,备忘录模式可以和原型模式一起使用。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表