Command模式

来源:互联网 发布:js设置div透明度 编辑:程序博客网 时间:2024/04/29 07:22

命令模式

动机(Motivation

在软件的构建过程中,“行为请求者”和“行为为实现者”通常呈现一种“紧耦合”。但在某些场合——比如需要对行为进行记录、撤销/重做、事务等处理,这种无法抵御变化的紧耦合不合适的。

在这种情况下,如何将“行为请求者”和“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。

意图(Intent

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

结构(Structure

几个要点

Command模式的根本目的在于将“行为请求者”和“行为实现者”解耦,在面向对象的设计中,常用的实现手段是将“行为抽象为对象”。

实现Command接口的具体命令对象ConcreteCommand有时候根据需要可能会保存一些额外的状态信息。

通过使用Composite模式,可将多个“命令”封装为一个“复合命令”MacroCommand

Command模式和C#中的Delegate有些类似,但两者定义行为接口的规范有所区别:Command模式以面向对象的“接口”来定义行为接口规范,更严格,更符合抽象原则;而Delegate以函数签名方法定义行为接口规范,更灵活,但抽象能力比较弱。