【发布时间】:2010-09-27 16:48:20
【问题描述】:
什么是动作设计模式,我以前没听说过?我怀疑它与Command Design pattern [wikipedia] 相同,但我找不到任何资源。
【问题讨论】:
标签: design-patterns command-pattern
什么是动作设计模式,我以前没听说过?我怀疑它与Command Design pattern [wikipedia] 相同,但我找不到任何资源。
【问题讨论】:
标签: design-patterns command-pattern
你说得对,动作模式 == 命令模式。您在 GUI 设计中经常听到它称为动作模式,形式为“按下某个按钮,执行此动作”。在代码中,按钮将与某种动作对象连接起来。
【讨论】:
动作设计模式与命令设计模式相同。 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){}
}
希望对你有帮助。
【讨论】:
我现在在 MSDN 上阅读“The Action/Executor Pattern”,我不同意命令和操作/执行器模式相同的前提。
来自 SourceMaking.com 上Command Pattern 的描述:
- 将请求封装为对象,从而让您可以对具有不同请求、队列或日志请求的客户端进行参数化,并支持可撤消的操作。
- 将“在对象上调用方法”提升为完整对象状态
- 面向对象的回调
来自 MSDN 关于 Action/Executor 模式的文章:
Action/Executor 模式确定了将用例映射到代码的策略,从而提高了可见性和敏捷性。此外,它还解决了污染实体和跳过正确使用事务的问题。
区别似乎在于“动作”封装了一个或多个步骤,当成功执行时,将控制权委托给另一个负责了解如何将这些更改持久化到数据库、Web 服务或文件存储的对象。操作与其执行/持久化的方式是分离的。
“命令”感觉像是动作/执行者模式的一半——“动作”似乎是“命令”的同义词。 Action/Executor 模式更进一步,描述了另一个关注点,其职责是接受“操作”或“命令”产生的更改并将它们保存在某个地方。
【讨论】: