• 设计模式中的黄金搭档:命令模式+观察者模式



    现有场景描述:
    现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现的吗?
    它们用的是==命令模式+观察者模式==,你答对了吗?
    简单科普一下
    啥是==Command模式==
    Command模式:
    - 模式类型:行为类模式
    - 定义:将一个操作、一个方法调用、一个命令封装成一个对象,在合适的时候让这个对象进行执行。
    - 适用场景(执行意愿):像个皇帝身边的守护侍卫一样,随叫随到。随时准备着等待被调用。例如:软件提供的菜单按钮,点击了,就会执行相应的操作。
    - 类图:

    调用者中有个聚合关系的命令类
    命令类索引着命令接受者
    是不是==So Easy!!==

    啥是==Obsevser模式==?
    - 模式类型:行为类模式
    - 定义:表示的是一种一对多的关系。当被观察者类A的属性aa发生了改变,就会主动去通知观察类B、C、D,这样观察类们的状态就会及时的被更新了。
    - 适用场景(执行意愿):控制器观察model中的属性,当属性变化了就去更新View的信息。系统时刻观察者键盘的字符输入,有了输入时,就把输入信息通知给View展示。等等。
    - 类图:

    被观察者索引着观察者对象
    是不是==So Easy!!==

    Cocoa Touch框架内的实际应用
    NSUndoManager是苹果提供的撤销恢复管理类,它里面主要有三个要素构成
    - 恢复栈
    - 撤销栈
    - 命令对象:NSInvocation
    图表显示如下:进入撤销栈时,NSInvocation执行撤销命令

     


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

    开发中如何将它们合起来用呢?
    1.在Command中添加命令执行对象NSInvocation
    2.在Command中添加观察者列表,当命令执行是通知列表中的观察者
    3.创建一个类似NSUndoManager的类,来管理整体commond列表

    文章同步发布在简书:https://www.jianshu.com/p/ec11c30b100d

  • 相关阅读:
    php程序去除文件 bom头
    类继承接口后,实现接口的方法
    virtual和abstract的使用场景分别是什么?待更新。
    get请求和post请求的总结
    ES6新语法,持续更新
    display:flex中的不懂的问题,待处理
    css相邻兄弟选择器(+),伪类(:hover),伪元素(::after)
    HTML中的input的type类型
    命令行打开程序的集合
    sqlserver 常用的语句
  • 原文地址:https://www.cnblogs.com/zhou--fei/p/9905536.html
Copyright © 2020-2023  润新知