我们常用的撤销和恢复功能,你知道它们使用了什么设计模式吗?
设计模式 使用 什么 功能 常用 恢复 我们 知道
2023-06-13 09:18:16 时间
来源 | cnblogs.com/zhou--fei/p/9905536.html
现有场景描述:
现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现的吗?
它们用的是命令模式 + 观察者模式,你答对了吗?
简单科普一下
啥是命令模式(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列表
相关文章
- 23种设计模式之命令模式和策略模式的区别
- 23种设计模式之中介者模式(Mediator)
- JS设计模式之单例模式
- 设计模式、框架、架构、平台的区别「建议收藏」
- Spartacus 使用 Command 设计模式之后对以前 Connector 实现的重用
- React组件设计模式之-纯组件,函数组件,高阶组件
- Java设计模式之模板模式
- Java设计模式之适配器模式
- 软件测试|PO设计模式在 UI 自动化中的实践
- 设计模式 - 六大设计原则之LSP(里氏替换)
- 设计模式 | 行为型 | 观察者模式
- 【设计模式】软件设计七大原则 ( 里氏替换原则 | 代码示例 | 类示例 | 方法入参示例 | 方法返回值示例 )
- 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )
- Go 语言实现创建型设计模式 - 单例模式
- 设计模式之模板方法模式(行为型)详解架构师
- php设计模式Factory(工厂模式)
- php设计模式之单例模式使用示例
- 浅谈C#设计模式之开放封闭原则