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

作者:滴水微澜

cnblogs.com/zhou--fei/p/9905536.html

现有场景描述:

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

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

简单科普一下

啥是命令模式(Command)

Command模式:

  • 模式类型:行为类模式

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

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

  • 类图:

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

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

命令类索引着命令接受者

是不是So Easy!!

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

啥是观察者(Obsevser)模式?

  • 模式类型:行为类模式

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

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

  • 类图:

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

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

是不是So Easy!!

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

Cocoa Touch框架内的实际应用

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

  • 恢复栈

  • 撤销栈

  • 命令对象:NSInvocation

图表显示如下:

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

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

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

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

开发中如何将它们合起来用呢?

  1. 在Command中添加命令执行对象NSInvocation

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

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

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

设计模式是什么鬼(初探)

设计模式是什么鬼(原型)

设计模式是什么鬼(单例)

设计模式是什么鬼(适配器)

设计模式是什么鬼(策略)

设计模式是什么鬼(状态)

设计模式是什么鬼(模板方法)

设计模式是什么鬼(门面)

设计模式是什么鬼(装饰)

设计模式是什么鬼(中介)

设计模式是什么鬼(组合)

设计模式是什么鬼(迭代器)

设计模式是什么鬼(备忘录)

设计模式是什么鬼(责任链)

设计模式是什么鬼(观察者)

设计模式是什么鬼(代理)

设计模式是什么鬼(工厂方法)

设计模式是什么鬼(桥接)

设计模式是什么鬼(抽象工厂)

设计模式是什么鬼(建造者)

设计模式是什么鬼(命令模式)

设计模式是什么鬼(访问者)

设计模式是什么鬼(解释器)

设计模式什么鬼?(终章)

琐碎时间想看一些技术文章,可以去公众号菜单栏翻一翻我分类好的内容,应该对部分童鞋有帮助。同时看的过程中发现问题欢迎留言指出,不胜感谢~。另外,有想多了解哪些方面内容的可以留言(什么时候,哪篇文章下留言都行),附菜单栏截图(PS:很多人不知道公众号菜单栏是什么)

END

我知道你 “在看”

你可能感兴趣的:(设计模式,git,java,数据库,shell)