作者:滴水微澜

现有场景描述:现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现的吗?

它们用的是命令模式+观察者模式,你答对了吗?

简单科普一下

啥是命令模式(Command)?

Command模式:模式类型:行为类模式

定义:将一个操作、一个方法调用、一个命令封装成一个对象,在合适的时候让这个对象进行执行。

适用场景(执行意愿):像个皇帝身边的守护侍卫一样,随叫随到。随时准备着等待被调用。例如:软件提供的菜单按钮,点击了,就会执行相应的操作。

类图:

调用者中有个聚合关系的命令类

命令类索引着命令接受者

是不是So Easy!!

关于命令模式,如果有不熟悉的童鞋,看这里,加代码具体来讲解:设计模式是什么鬼(命令模式)

啥是观察者(Obsevser)模式?模式类型:行为类模式

定义:表示的是一种一对多的关系。当被观察者类A的属性aa发生了改变,就会主动去通知观察类B、C、D,这样观察类们的状态就会及时的被更新了。

适用场景(执行意愿):控制器观察model中的属性,当属性变化了就去更新View的信息。系统时刻观察者键盘的字符输入,有了输入时,就把输入信息通知给View展示。等等。

类图:

被观察者索引着观察者对象

是不是So Easy!!

关于观察者模式,如果有不熟悉的童鞋,看这里,加代码具体来讲解:设计模式是什么鬼(观察者)

Cocoa Touch框架内的实际应用

NSUndoManager是苹果提供的撤销恢复管理类,它里面主要有三个要素构成恢复栈

撤销栈

命令对象:NSInvocation

图表显示如下:

进入撤销栈时,NSInvocation执行撤销命令

进入恢复栈时,NSInvocation执行恢复命令

开发中如何将它们合起来用呢?在Command中添加命令执行对象NSInvocation

在Command中添加观察者列表,当命令执行是通知列表中的观察者

创建一个类似NSUndoManager的类,来管理整体commond列表

以上就是对撤销和恢复功能中设计模式运用的科普,设计模式在我们开发中是非常重要的,用好了事半功倍,写出的代码非常优雅。想要学习设计模式,可以翻之前的文章,这里给出链接,方便翻阅

java 撤销恢复按钮_再涨个姿势,我们常用的撤销和恢复功能,你知道它们使用了什么设计模式实现吗?...相关推荐

  1. 再涨个姿势,我们常用的撤销和恢复功能,你知道它们使用了什么设计模式实现吗?...

    作者:滴水微澜 cnblogs.com/zhou--fei/p/9905536.html 现有场景描述: 现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现 ...

  2. java swt 画按钮_向表中添加按钮(java swt)

    我正在尝试复制类似于此的UI: 我一直在关注如何创建表格每列中的按钮的作者说明(没有成功).我的项目与他的区别在于我正在尝试使用Tree而不是Table,而我正在使用eclipse TreeViewe ...

  3. 海天食品的java开发工作如何_再三个月就秋招了,我想找一份java开发工作,现在应该怎么准备一下?...

    在找工作之前,大家都要做一些准备工作,java开发也是如此 掌握核心JavaSE 首先,从核心Java(JavaSE)开始学习,尽可能地掌握它.你应该了解和掌握一些基本概念,如循环,数组,运算符等等. ...

  4. java获取cpu使用率_再一次生产 CPU 高负载排查实践

    前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨. 其实早在去年我也处理过类似的问题,并记录下来:<一次生产 CPU 1 ...

  5. java 自定义形状按钮_制作自定义背景Button按钮、自定义形状Button的全攻略

    在Android开发应用中,默认的Button是由系统渲染和管理大小的.而我们看到的成功的移动应用,都是有着酷炫的外观和使用体验的.因此,我们在开发产品的时候,需要对默认按钮进行美化.在本篇里,笔者结 ...

  6. java swing取消按钮_在Java Swing中取消选择单选按钮

    当显示一组JRadioButtons时,最初没有选择它们(除非您以编程方式强制执行).即使用户已选择按钮,我也希望能够将按钮重新置于该状态,即不应选择任何按钮. 但是,使用通常的嫌疑人无法提供所需的效 ...

  7. java 修改源码_再谈给应用程序diy启动画面和java源代码补丁修改

    再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 搞diy ...

  8. java 匹配mysql按钮_使用Java在mysql查询中设置匹配函数

    我有以下在java中查询(mysql)的摘录: queryGeral.append("FROM product p, fabricante_product fp, fabricante f, ...

  9. java excel 创建按钮_通过单击Excel按钮在Catia中设计零件

    我已经在用宏编辑器构建的Catia V5中编写了一些宏,但我无法弄清楚如何从Excel访问Catia命令 . 我想知道如何通过仅在excel文件圆柱体的半径和长度中创建一个简单的直圆柱体 . 我想在C ...

最新文章

  1. Android性能优化工具
  2. c# spire.xls 设置文字为微软雅黑_Excel工作薄常规样式设置,WorkBook.Styles
  3. 六款值得推荐的 android 开源框架简介
  4. 无状态会话的ejb_Java EE状态会话Bean(EJB)示例
  5. 实体类equals/hashCode
  6. web前端工程师必须掌握的24条宝贵经验!
  7. 2018 蓝桥杯省赛 B 组模拟赛(五)题 G题
  8. 第1天线性表顺序存储
  9. js动态创建Form表单并提交
  10. 汉字字符集编码查询 unicode编码查询
  11. 自动化测试用例设计方法
  12. AR8035芯片手册 解析|CSDN创作打卡
  13. 新闻管理系统数据库设计
  14. Java面试智力题逻辑题汇总2021
  15. 轻量级web api_API接口管理,这15种开源工具助你管理API
  16. 小甲鱼python入门笔记(一)(全)
  17. 【云端软件】竞价实例(Spot instance):可节省80%-90%的云计算成本
  18. Unix timestamp时间 与 普通时间 转换方法
  19. 什么是Linux,它能干嘛?
  20. 主流数据库——一、数据库基础

热门文章

  1. C++基础::mutable 关键字
  2. 为什么黑客都用python-python为什么会作为黑客的首选语言?这几本书给你答案(已集齐)...
  3. python教程2019全套-如何领取Python2019 全套视频教程
  4. python零基础能学吗-Python编程语言好学吗?零基础转行能学Python吗?
  5. php和python-一个身居中国的法国程序员谈Python与PHP
  6. 谷歌开源语音识别AI技术,可以从人群中区分每个人的发言
  7. java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...
  8. css3禅密花园叫什么名字_CSS秘密花园:灵活的椭圆形
  9. TypeScript简介
  10. 怎么在Android布局里面写下拉框,Android CoordinatorLayout(六) 加入下拉功能