命令模式(Command)将一个请求封装为对象,从而使你可用不同的请求对客户进行参数.对请求排队或者记录日志,以及支持可撤销的操作.也就是说将功能封装成对象.对象的激发者和接收者都不需要了解命令的执行过程.从而消除了激发者和接收者之间的耦合.为程序提供了更清晰的结构.实际运用中通过将系统的命令封抽象成一个接口所有的命令都是这个接口的实现.
为了给命令模式一个整洁清晰的结构,命令模式通常和工厂模式一起使用.采用一个工厂对命令对象的建立进行管理,减少命令激发者与命令对象之间的耦合程度.
public interface ICommand
{
void Execute();
void Undo();
} // interface ICommand
public class DirCommand : ICommand
{
public void Execute()
{
}
public void Undo()
{
}
} // class DirCommand
public class RenameCommand : ICommand
{
public void Execute()
{
}
public void Undo()
{
}
} // class RenameCommand
public class Factory
{
public static ICommand Create(string command)
{
ICommand cmd;
switch (command)
{
case "Dir" :
cmd = new DirCommand();
break;
case "Rename" :
cmd = new RenameCommand();
break;
default :
cmd = new DirCommand();
break;
}
return cmd;
}
} // class Factory