• 理解设计模式(命令者)


      当请求者无法或不能与接收者直接交流时,使用命令者模式。

    特定环境下一类问题

    以下情况适用命令者模式:程序中,

    • 需要排队完成某些逻辑
    • 支持撤销操作
    • 支持宏操作

    解决方案

    4个角色如下:

    • 请求者—封装抽象命令引用,发起请求,即命令执行
    • 抽象命令—规范命令执行
    • 具体命令—命令执行逻辑,封装接收者引用
    • 接收者—只负责完成自身逻辑,不含任何引用

    请求者作为发起者,发出请求,执行命令

    最终,命令驱动接收者作出相应

    优劣

    优点:

    • 请求者和接收者相互解耦
    • 命令可扩展,符合 “开闭” 原则
    • 请求被封装在具体命令内,命令可持久化,则该模式可用于记录日志
    • 该模式可延伸至宏命令,实现命令排队,按序执行

    劣势:

    • 请求者和接收者虽解耦,但请求者和命令、命令和接收者之间存在依赖
    • 请求者和接收者并不符合接口设计原则,能扩展,但无规范

    命令的撤销或终止

    此时,接收者角色应提供相应操作的反操作

    宏命令

    也算是增加一个角色:具体宏命令

    该角色封装抽象命令引用的集合,同时:

    • 能按序执行集合内所有命令
    • 可支持按需终止或撤销集合内某一命令

    延伸

    —接收者接口

    接收者角色也可增加一个抽象接收者,来规范其统一行为

    —命令和接收者的对应
    一对一 : 一个命令,对应一个接收者,逻辑清晰

    多对一 : 但多个命令,一个接收者,也可以
    (要求接收者内部分多个逻辑流程,来处理不同命令)

    一对多 : 一个命令,多个接收者,也可以
    (要求命令封装接收者集合)

    命令和接收者间的关系,类似观察者模式

    另,多对多,逻辑上合适与否,暂不讨论

    参考

    java设计模式之命令者模式, 作者 : qq7342272

  • 相关阅读:
    easyUI的汇总列,在前端生成
    return返回两个三元表达式的和,返回不正确,同样要注意在JavaScript中,也是如此
    清除浮动有哪些方式?比较好的方式是哪一种?
    浏览器重置样式
    MUI框架的缩写输入
    会自动消失的提示信息
    JSON.stringify转化报错
    Jquery on方法绑定事件后执行多次
    属性索引选择元素
    字符串赋值数字时的问题
  • 原文地址:https://www.cnblogs.com/CoolSoul/p/4984843.html
Copyright © 2020-2023  润新知