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