规范策略是使用

Command pattern.您将代表可以作为Command对象执行的操作,并且每个对象都放在堆栈中.然后,应用程序的状态由初始状态加上堆栈具有的所有内容定义.因此,“撤销”操作然后只是弹出顶部堆栈项并将剩余项重新应用到初始状态.

实际上,有时将这些操作应用于初始状态以生成当前状态是昂贵的.例如,对于一系列复杂的图像调整,可能会出现这种情况,就像在Photoshop中找到的那样.在这种情况下,在内存中保持交替状态堆栈序列是很常见的:

+---------+

| state_0 |

+---------+ +---------+

| next -------> | stack_0 |

+---------+ +---------+

| data | +---------+

| next -------> | state_1 |

+---------+ +---------+

| next ----- ...

+---------+

每个stack_i保持命令,直到它超过某些预设复杂度(例如,命令超过计算成本X)或有序(例如,堆栈保持X或更多命令)限制.此时,创建新的中间状态对象state_i 1以封装状态,并且创建新的空堆栈stack_i 1以保存新命令.

这样,您只需将一小段命令应用于上次快照状态即可获得当前状态.这是以记忆整个状态为代价的,这对于非常大的应用程序可能是不可行的,但是您可以选择仅对一组状态进行快照以进行优化.

python撤销功能思路,在python中进行撤消相关推荐

  1. 超好用Python小功能(持续更新中)

    文章目录 一.字符串操作小功能 1.把数字转为千位数值类型 2.检测字符串是不是纯数字 3.python列表的交.并.差集 4.对列表中字典中的字典排序 5.python 求角度大小 6.已知一个点, ...

  2. java收藏功能思路,互联网产品中的“收藏”功能思路

    简单谈谈"收藏"(互联网产品中的收藏功能)的思路,抛砖引玉,欢迎交流. 1."收藏"是什么? 收藏是个性化地整理信息资源. every coin has two ...

  3. python 搜索功能_怎么python检索Twitter搜索功能?

    虽然这个提问过去好久了,但是这里面有一个重要问题我想弄清楚-- 好巧,我也在看这本书,不过大概版本和题主的不太一样,我没找到这个示例-- 我自己也在做twitter的data mining,不过我用的 ...

  4. python撤销快捷键-汇总学习Python必备的42个快捷键,看完收获满满

    首先先从Shift系列的按键开始: 1. Shift+Alt+Enter 切换全屏编辑 2. Shift+Alt+C 新建类 3. Shift+Alt+箭头键 选择矩形文本 4. Shift+F3 查 ...

  5. 基于 MongoDB 的 python 日志功能

    本文首发于 Gevin的博客 原文链接:基于MongoDB的python日志功能 未经 Gevin 授权,禁止转载 基于MongoDB的python日志功能 why-log-to-mongodb 我几 ...

  6. python主要功能_Python主要功能

    python主要功能 Python main function is executed only when it's being executed as a python program. As yo ...

  7. python的功能模块_Python的功能模块[1] - struct - struct 在网络编程中的使用

    struct模块/ struct Module 在网络编程中,利用 socket 进行通信时,常常会用到 struct 模块,在网络通信中,大多数传递的数据以二进制流(binary data)存在.传 ...

  8. python 自动化办公 uibot_使用 Python 扩展丰富 UiBot 的功能及在 UiBot 中引用 Python 模块...

    前言 UiBot除了自带的强大功能外,还允许有编程经验的RPA开发人员对功能进行自由扩展,目前UiBot支持以下四种扩展方式: Python插件.Lua插件.Lua Mod插件.COM插件(.Net也 ...

  9. 非常实用的word文本括号匹配是否正确的code,可按照此思路扩展到python处理大批量文本文件的检错中,非常实用!!!

    非常实用的word文本括号匹配是否正确的code,可按照此思路扩展到python处理大批量文本文件的检错中,非常实用!!! 原理: 栈 代码: #include <stdio.h> #in ...

最新文章

  1. 130万奖金池!国家智能网联汽车创新中心ICV创新算法攻关任务报名通道火热开启!...
  2. bzoj2427: [HAOI2010]软件安装
  3. 您不是订单管理的定向开发者_Web Summit 2020大会:华为在欧洲发布HMS Connect,持续助力合作伙伴与开发者的创新增长...
  4. 如何用express+node+ejs 搭建一个简单的页面
  5. 语言结构体在内存的分布_结构体内存对齐,这篇文章给你彻底搞会!(干货收藏)...
  6. 多种协议数据包的结构
  7. 用重构指导Clean Code(二):依恋情结和switch语句
  8. 桌面版docker操作_10分钟快速掌握Docker必备基础知识
  9. php文件便利,PHP便利文件夹下所有文件,创建压缩包
  10. 【沫沫金】安卓手机版 - 日期控件
  11. 单向链表的python实现
  12. Docker客户端连接Docker Daemon的方式
  13. Excel数据分析学习笔记(三)Excel常用数据分析工具(需要统计学基础)
  14. AI新技术:利用神经网络对图片进行超级压缩
  15. mysql bi 报表_BI报表是什么,BI报表的好处,BI和报表的区别
  16. linux 版本号 笔记本_2019 年最佳 Linux 笔记本电脑发行版 top10
  17. 【MATLAB基础绘图第7棒】绘制各式柱状图
  18. 【SpringBoot整合Dubbo和Zookeeper】
  19. 2020 奇安信前端秋招笔试选择题
  20. 【nexus】 的下载与环境配置

热门文章

  1. el-admin实战解析
  2. HanLP 自然语言处理使用总结
  3. 用js判断字符串的字节长度(区分汉字和英文)@莫成尘
  4. 中国航空煤油行业供需情况分析与十四五投资战略规划研究报告2022年版
  5. Android 口令实现(自己复制,返回首页设置不显示)
  6. 如何排查并修复内存泄漏
  7. IE8,9,10下table th不显示边框解决方法
  8. 网易云更好的音质【音乐】
  9. 2021-07-08 javascript 上
  10. 基于51单片机的RFID智能门禁系统