【问题标题】:Command pattern vs Queue命令模式与队列
【发布时间】:2016-09-21 18:42:28
【问题描述】:

我浏览了命令模式并了解到它可以在列表中保存不同的命令。那么,当我们有简单的集合类(如堆栈或队列)时,为什么要构造一个复杂的结构。为什么在命令模式中没有使用队列?

Reference for command pattern

 Queue q = new Queue();

     q.Enqueue('A');
     q.Enqueue('M');
     ch = (char)q.Dequeue();

【问题讨论】:

  • 我不确定您认为这两者之间的直接关系。命令模式专门解决了如何解决发送者和接收者之间的通信问题。我也不明白为什么您认为队列不能/不能与命令模式一起使用。通常情况恰恰相反,它被利用了。
  • 根据我的理解,命令模式定义了我们如何保留请求以供将来使用。
  • 这只是命令模式的目的之一。还可以将请求定义为特定对象,并且可以根据所需的任何参数化来管理请求与各种接收者之间的关系。
  • 仅用于撤销/重做的概念
  • 在一天结束时,您将数据结构与模式进行比较,并询问为什么您拥有模式而不仅仅是数据结构。数据结构只能帮助模式完成其工作。它们不是彼此的直接替代品,也不应该是。

标签: c# asp.net design-patterns


【解决方案1】:

您链接的文章确实使用Stack 作为UndoableCommands:

class CommandManager { private Stack commandStack = new Stack(); ...

但是,Queue 的使用表示来自用户的命令并被发送到命令处理系统,这将有助于在命令执行时继续使表单响应。这实际上是异步编程1,远远超出了本文的范围。

1通常情况下,我会在此处链接一篇文章,但异步编程的主题非常广泛,我真诚地认为您最好在谷歌上搜索它并查看多个来源。

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 2011-02-20
    • 2015-01-19
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多