程序设计模式结课论文.docVIP

  • 33
  • 0
  • 约3.58千字
  • 约 8页
  • 2021-03-05 发布于广东
  • 举报
《程序设计模式》结课论文 论文题目设计模式之备忘录模式 学生姓名 学 号 专业班级 指导教师 2015年 1月26日 备忘录模式 1?模式背景 有一首歌叫做《如果再回到从前》,相信大家一定听过。吋光如果可以 倒流,那么很多吋候做的错误的决定或者选择就可以回到去过,撤销并重 做,这是一件多么好的事情啊! 还记得玩单机PC游戏时,通常在打BOSS前都要先保存一个进度, 如果失败了还可以回到刚才的那个进度,从头再来。很多现实里无法实现 的事情在软件屮就可以实现,而这正是设计应用软件吋常用的基本思想一 —保存备忘录。 2.模式动机与意图 为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔 药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操 作时系统的状态,一旦出现误操作,可以把存储的历史状态取出即可回到Z前的 状态。 现在大多数软件都有撤销(Undo)的功能,快捷键一般都是Ctrl+Z,用的就 是为了解决这个后悔的问题。 在此以游戏进度保存为例子,在游戏的某个场景,以游戏角色有生命力、攻 击力、防御力等等数据,在打BOSS前和后一定会不一样。因此,实现游戏当前 内容的保存,在感觉打不过BOSS吋,允许回到游戏存档吋的状态。 为了实现这一功能,我们要使用备忘录模式。 3.模式定义 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对 象之外保存这个状态。这样以后就可以将该对彖恢复到原先保存的状态。 4.结构 4.结构 4. 1备忘录模式 4. 1. 1备忘录模式结构图 4. 1.2模式分析 由于在备忘录屮存储的是原发器的屮间状态,因此需要防止原发器以外的其 他对象访问备忘录。 备忘录对象通常封装了原发器的部分或所有的状态信息,而且这些状态不能 被其他对象访问,也就是说不能在备忘录对象之外保存原发器状态,因为暴露其 内部状态将违反封装的原则,可能有损系统的可靠性和可扩展性。 4. 1.3备忘录模式的优点 提供了一种状态恢复的实现机制,使得用户可以方便地回到-?个特定的历史 步骤,半新的状态无效或者存在问题时,可以使用先前存储起来的备忘录将状态 复原。 实现了信息的封装,一个备忘录对象是一种原发器对象的表示,不会被其他 代码改动,这种模式简化了原发器对象,备忘录只保存原发器的状态,采用堆栈 来存储备忘录对象可以实现多次撤销操作,可以通过在负责人屮定义集合对象来 存储多个备忘录。 4. 1.4备忘录模式的缺点 资源消耗过大,如果类的成员变量太多,就不可避免占用大量的内存,而且 毎保存一次对象的状态都需要消耗内存资源,如果知道这?点大家就容易理解为 什么一些提供了撤销功能的软件在运行吋所需的内存和硬盘空间比较大了。 4.2当前例子结构图 Originator (游戏角色):负责创建一个备忘录Memento,用以记录当前吋刻它 的内部状态,并可使用备忘录恢复它的状态。Originator可根据需要决定Memento 存储Originator的哪些内部状态。 Memento(备忘存档):负责存储6 iginator对象的内部状态,并可防止6 iginator 以外的其他对象访问备忘录Mementoo 5.代码实现 Originator 游戏角色类 class Originator { private int vit; private int atk; private int def; 〃初始化角色 public void GetInitState() { vit = 100; atk = 100; def= 100; } 〃显示角色状态 public void StateDisplayO { Console.WriteLine(H角色状态为:” + 生命值:”+vit+”\『+” 攻击力:,,+atk+,,\nH+H防御力:n+def); } 〃保存游戏状态 public RoleStateMemento SaveState() { return (new RoleStateMemento(vit,atk,def)); 〃恢复角色状态 public void RecoveryState(RoleStateMemento memento) this.vit = memento.Vitality; this.atk = memento.Attack; this.def = me men to. Defen se; } 〃角色战斗?打BOSS public void Fight() { vit -= 50; } RoleStateMemento 角色状态存储类 class RoleStateMemento { private int vit; private int atk; private int

文档评论(0)

1亿VIP精品文档

相关文档