原文:乐在其中设计模式(C#) - 命令模式(Command Pattern)
[索引页][源码下载]
乐在其中设计模式(C#) - 命令模式(Command Pattern)
作者:webabcd
介绍
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
示例
有一个Message实体类,某个类对它的操作有Insert()和Delete()方法。现在要求可以对之前的所有操作做撤销和重复。

MessageModel
Action
SqlMessage
ICommand
SqlMessageCommand
Message
client

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;


using Pattern.Command;


public partial class Command : System.Web.UI.Page



{

protected void Page_Load(object sender, EventArgs e)


{

Message m = new Message();


Response.Write("操作");

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第1条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第2条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第3条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第4条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Delete, new MessageModel("第2条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第5条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Delete, new MessageModel("第3条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第6条", DateTime.Now)));

Response.Write("<br />");

Response.Write(m.Do(Action.Insert, new MessageModel("第7条", DateTime.Now)));

Response.Write("<br />");

Response.Write("<br />");


Response.Write("撤销4次操作");

Response.Write("<br />");

Response.Write(m.Undo());

Response.Write("<br />");

Response.Write("<br />");


Response.Write("重复2次操作");

Response.Write("<br />");

Response.Write(m.Redo());

Response.Write("<br />");

Response.Write("<br />");


Response.Write("撤销3次操作");

Response.Write("<br />");

Response.Write(m.Undo());

}

}
运行结果
操作
Insert:第1条
Insert:第2条
Insert:第3条
Insert:第4条
Delete:第2条
Insert:第5条
Delete:第3条
Insert:第6条
Insert:第7条
撤销4次操作
Delete:第7条 Delete:第6条 Insert:第3条 Delete:第5条
重复2次操作
Insert:第5条 Delete:第3条
撤销3次操作
Insert:第3条 Delete:第5条 Insert:第2条
参考
http://www.dofactory.com/Patterns/PatternCommand.aspx
OK
[源码下载]