public class Barbecuer
{
public void BakeMutton()
{
Console.WriteLine("烤羊肉串");
}
public void BakeChickenWing()
{
Console.WriteLine("烤鸡翅");
}
}
abstract class Command
{
protected Barbecuer receiver;
public Command(Barbecuer receiver)
{
this.receiver = receiver;
}
abstract public void ExcuteCommand();
}
class BakeMuttonCommand : Command
{
public BakeMuttonCommand(Barbecuer receiver) : base(receiver)
{
}
public override void ExcuteCommand()
{
receiver.BakeMutton();
}
}
class BakeChickenWingCommand : Command
{
public BakeChickenWingCommand(Barbecuer receiver) : base(receiver)
{
}
public override void ExcuteCommand()
{
receiver.BakeChickenWing();
}
}
class Waiter
{
private IList<Command> commandList = new List<Command>();
public void SetOrder(Command command)
{
if (command.ToString().Equals("Test28.BakeMuttonCommand"))
{
Console.WriteLine("羊肉串卖完了!");
}
else
{
this.commandList.Add(command);
Console.WriteLine("增加订单:" + command.ToString() + " 时间:" + DateTime.Now.ToString());
}
}
public void CancelCommand(Command command)
{
commandList.Remove(command);
Console.WriteLine("取消订单:" + command.ToString() + " 时间:" + DateTime.Now.ToString());
}
public void Notify()
{
foreach(Command command in commandList)
{
command.ExcuteCommand();
}
}
}
class Program
{
static void Main(string[] args)
{
Barbecuer barbecuer = new Barbecuer();
Waiter waiter = new Waiter();
BakeChickenWingCommand bcwc = new BakeChickenWingCommand(barbecuer);
BakeMuttonCommand bmc = new BakeMuttonCommand(barbecuer);
waiter.SetOrder(bcwc);
waiter.SetOrder(bmc);
waiter.CancelCommand(bcwc);
waiter.Notify();
}
}