Command 模式
大多数类都是一组方法和相应的一组变量的结合。而Command 仅仅由一个具有唯一方法的接口组成。简单的几乎可笑。所以有人说该模式具有功能分解的意味,根本是对面向对象的亵渎。
Public interface Command
{
public void do();
}
就是这样形成了最简单的Command模式,具体的命令实现了Command接口的Do方法。
所以Command的拥有者不需要知道Comman具体干了什么,只需要调用与之绑定的
Command.do方法就可以了。
已一个模拟实现门开关,和敲击的程序为例,就可以运用Command模式。
可以这样阐述这个问题,程序创建一个DoorUI的实例。该实例可以假象成一个WebForm或则WinForm 他能接受用户的输入。
他能够探知用户是在开门,还是关门,还是敲门。甚至是其他操作。
当他接收到用户的输入。便生成一个Command实例。例如有人试图开门:
Command Cmd =new OpenCommand();
然后DoorUI触发一个事件表示接收到了一个用户命令,并且将该命令传输给Application
EventGetCommand (aCmd);
当Application收到该事件以后,直接调用Cmd.do()方法便可。
ADoor.Cmd =aCmd;
ADoor.Cmd.do();
这个是最简单的例子。目前我对Command的理解也限制于这个层面。当我们需要添加一个按门铃的操作时 只需要编写一个实现Command接口的新类:RingCommand就可以了。
除此以外,Command模式也可以很好的解决事务操作以及Do和UnDo等问题。
其真正的使用价值,还是要在实际的项目中才能体现出来。