11

什么是动作设计模式,我之前没听说过?我怀疑它与命令设计模式[wikipedia] 相同,但我找不到任何资源。

4

3 回答 3

13

你是对的,动作模式==命令模式。您在 GUI 设计中经常听到它称为动作模式,其形式为“按下某个按钮,执行此动作”。在代码中,按钮将与某种动作对象连接起来。

于 2008-12-19T11:48:43.183 回答
5

我现在正在 MSDN 上阅读“动作/执行器模式”,我不同意命令和动作/执行器模式相同的前提。

SourceMaking.com上对命令模式的描述:

  • 将请求封装为对象,从而让您可以参数化具有不同请求、队列或日志请求的客户端,并支持可撤消的操作。
  • 将“在对象上调用方法”提升为完整对象状态
  • 面向对象的回调

来自关于动作/执行器模式的 MSDN 文章:

Action/Executor 模式确定了将用例映射到代码的策略,从而实现更好的可见性和敏捷性。此外,它还解决了污染实体和跳过正确使用事务的问题。

不同之处似乎在于“动作”封装了一个或多个步骤,当这些步骤成功执行时,将控制权委托给另一个负责了解如何将这些更改持久化到数据库、Web 服务或文件存储的对象。动作与其执行/持久化的方式是分离的。

“命令”感觉像是动作/执行者模式的一半——“动作”似乎是“命令”的同义词。Action/Executor 模式更进一步,描述了另一个关注点,其职责是接受“操作”或“命令”产生的更改并将它们保存在某个地方。

于 2016-03-03T20:21:25.290 回答
1

动作设计模式与命令设计模式相同。Action 是一个关键实体,它自身封装了有关其行为、必须对其 do() 方法进行哪些处理、如何撤消操作等信息。当一个应用程序或其任何组件按照Action设计模式进行设计时,应用程序中的一切活动都可以用动作的形式来表示,每件事都可以重做/撤消几次。例如。excel中的宏,文本编辑器中的撤消/重做等。

作为此设计模式中的构建块的动作类可以设计如下:-

public interface Action{
  public void do();
  public void undo();
  public void do(int iNoOfTimes);
}

public class FileCopyAction implements Action{
  private int iActionId;
  public void do(){}
  public void undo(){}
  public void do(int iNoOfItems){}
}

希望能帮助到你。

于 2015-11-05T07:38:34.810 回答