"Command"" 顾名思义 "命令""指令"的意思
Command 模式在现实当中的场景
例如:某一天,校长在教室走廊碰到了 高三一班的王老师,校长对王老师说":叫 高三一班的班长到他办公室去"(相当于命令),王老师接到校长的命令后,立即走到高三一班教室里面(执行校长的命令) 然后通知高三一班班长到校长办公室去.班长(命令接收者)听到命令后,就去了校长办公室. 通过这个场景大家应该对Command 模式有点印象了.
代码如下:
abstract class command //命令
{
protected Monitor mt;//班长mt
public command(Monitor mt)
{
this.mt = mt;
}
abstract public void ToOffice();//去校长办公室
}
class ImmediateToOffice : command//马上到校长办公室(具体的命令)
{
public ImmediateToOffice(Monitor mt)
: base(mt)
{
}
public override void ToOffice()//去校长办公室
{
Monitor ch = new Monitor();//班长
ch.chToOffice();//班长到校长办公室
}
}
class Monitor //班长
{
public void chToOffice()//班长去校长办公室
{
Console.WriteLine("去校长办公室");
}
}
class Teacher //老师
{
private command cd;//命令
public void Receivecd(command cd)//老师接受命令
{
this.cd = cd;
}
public void Implementcd()//老师执行接收到的命令
{
cd.ToOffice();
}
}
class Program
{
public static void Main(string[] args)
{
Monitor mt = new Monitor();//班长(接收者)
command cd1 = new ImmediateToOffice(mt);//命令为"叫班长马上到校长办公室去"
Teacher tc = new Teacher();//王老师(请求者)
tc.Receivecd(cd1);//老师接到命令
tc.Implementcd();//老师执行命令
}
}
{
protected Monitor mt;//班长mt
public command(Monitor mt)
{
this.mt = mt;
}
abstract public void ToOffice();//去校长办公室
}
class ImmediateToOffice : command//马上到校长办公室(具体的命令)
{
public ImmediateToOffice(Monitor mt)
: base(mt)
{
}
public override void ToOffice()//去校长办公室
{
Monitor ch = new Monitor();//班长
ch.chToOffice();//班长到校长办公室
}
}
class Monitor //班长
{
public void chToOffice()//班长去校长办公室
{
Console.WriteLine("去校长办公室");
}
}
class Teacher //老师
{
private command cd;//命令
public void Receivecd(command cd)//老师接受命令
{
this.cd = cd;
}
public void Implementcd()//老师执行接收到的命令
{
cd.ToOffice();
}
}
class Program
{
public static void Main(string[] args)
{
Monitor mt = new Monitor();//班长(接收者)
command cd1 = new ImmediateToOffice(mt);//命令为"叫班长马上到校长办公室去"
Teacher tc = new Teacher();//王老师(请求者)
tc.Receivecd(cd1);//老师接到命令
tc.Implementcd();//老师执行命令
}
}
输出:去校长办公室。
综上说述一个简单的命令模式就呈现在大家的面前,但仔细想下,从这个场景来看,有点象委托的味道,如校长委托王老师叫高三一班的的班长去他办公室.但不能与此委托等同.