国庆阅兵
总导演--Client---确定阅兵方案 有几个方阵,每个方阵要表演什么,表演流程
每个演习的方阵--Receiver-- 每个方阵负责自己要做的表演动作如行注目礼和列队前进
表演流程--Invoker--负责阅兵流程
原地行注目礼--ConcreteCommand
列队步行-ConcreteCommand
ICommand--Execute(), CanExecute()
Class Receiver
{
void walk();
void AttentionCeremony();
}
空军, 陆军,海军分别继承 Receiver,每个军队的表演方式不一样。
Class Director
{
海,陆, 空,
Invoker _invoker
public Director()// 构造函数里创建海陆空和流程
{
海陆空创建
_invoker=new Invoker();
_invoker.Append(海军注目礼命令);
_invoker.Append(空军注目礼命令);
_invoker.Append(陆军注目礼命令)
_invoker.Append(海军列队前进命令);
_invoker.Append(空军列队前进命令);
_invoker.Append(陆军列队前进命令);
}
pubicevoid Start() //可以多次调用,例如如果表演不满意,导演说重来一遍
{
_invoker.Execute();
}
}
Class Invoker
{
private List<ICommand> _cmdList() = new List<ICommand>();
void AppendCommand(ICommand){_cmdList.Add(cmd);}
void Execute()
{
foreach(ICommand cmd in _cmdList)
{
while(!cmd.CanExecute())
{
spleep(1000);//等待准备工作
}
cmd.Execute();// 执行
}
}
}