撤销功能的实现——备忘录模式(一)

194 篇文章 12 订阅
189 篇文章 401 订阅

      每个人都有过后悔的时候,但人生并无后悔药,有些错误一旦发生就无法再挽回,有些人一旦错过就不会再回来,有些话一旦说出口就不可能再收回,这就是人生。为了不后悔,凡事我们都需要三思而后行。说了这么多,大家可能已经晕了,不是在学设计模式吗?为什么弄出这么一堆人生感悟来,呵呵,别着急,本章将介绍一种让我们可以在软件中实现后悔机制的设计模式——备忘录模式,它是软件中的“后悔药”,是软件中的“月光宝盒”。话不多说,下面就让我们进入备忘录模式的学习。

 

21.1 可悔棋的中国象棋

       Sunny软件公司欲开发一款可以运行在Android平台的触摸式中国象棋软件,由于考虑到有些用户是“菜鸟”,经常不小心走错棋;还有些用户因为不习惯使用手指在手机屏幕上拖动棋子,常常出现操作失误,因此该中国象棋软件要提供“悔棋”功能,用户走错棋或操作失误后可恢复到前一个步骤。如图21-1所示:

21-1  Android版中国象棋软件界面示意图

      如何实现“悔棋”功能是Sunny软件公司开发人员需要面对的一个重要问题,“悔棋”就是让系统恢复到某个历史状态,在很多软件中通常称之为“撤销”。下面我们来简单分析一下撤销功能的实现原理:

      在实现撤销时,首先必须保存软件系统的历史状态,当用户需要取消错误操作并且返回到某个历史状态时,可以取出事先保存的历史状态来覆盖当前状态。如图21-2所示:

21-2撤销功能示意图

      备忘录模式正为解决此类撤销问题而诞生,它为我们的软件提供了“后悔药”,通过使用备忘录模式可以使系统恢复到某一特定的历史状态。

【作者:刘伟  http://blog.csdn.net/lovelion

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
备忘录模式是一种行为型设计模式,可以让程序在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以恢复到之前的某个状态。 在前端中,我们可以使用备忘录模式实现一些具有撤销操作的功能,例如撤回上一步操作、恢复被删除的数据等。 下面是一个简单的备忘录模式实现: ```javascript // 备忘录类 class Memento { constructor(state) { this.state = state; } getState() { return this.state; } } // 发起人类 class Originator { constructor() { this.state = null; } setState(state) { this.state = state; } getState() { return this.state; } saveStateToMemento() { return new Memento(this.state); } getStateFromMemento(memento) { this.state = memento.getState(); } } // 管理者类 class CareTaker { constructor() { this.mementos = []; } addMemento(memento) { this.mementos.push(memento); } getMemento(index) { return this.mementos[index]; } } // 使用示例 const originator = new Originator(); const careTaker = new CareTaker(); // 第一次保存状态 originator.setState('State #1'); careTaker.addMemento(originator.saveStateToMemento()); // 第二次保存状态 originator.setState('State #2'); careTaker.addMemento(originator.saveStateToMemento()); // 恢复到第一次保存的状态 originator.getStateFromMemento(careTaker.getMemento(0)); console.log(originator.getState()); // 输出 "State #1" ``` 在这个例子中,我们定义了三个类:备忘录类、发起人类和管理者类。发起人类用来创建和恢复备忘录,管理者类用来管理备忘录的集合。在这个例子中,我们将发起人类的状态保存到备忘录中,并将备忘录存储到管理者类中,以便以后可以恢复到之前的某个状态。 当需要撤销操作时,我们可以从管理者类中获取之前保存的备忘录,并将其恢复到发起人类中。这样,发起人类就可以回到之前的状态了。 当然,这只是一个简单的例子,实际应用中可能需要更多的代码来实现具体的功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值