命令模式(Command)
命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
代码
1.代码如下:
抽象命令类
using System;
namespace Command
{
//抽象命令类
public abstract class Command
{
protected Barbecuer receiver;
public Command (Barbecuer receiver)
{
this.receiver = receiver;
}
//执行命令
abstract public void ExcuteCommand();
}
}
烤羊肉串命令
using System;
namespace Command
{
//烤羊肉串命令
public class BakeMuttonCommand:Command
{
public BakeMuttonCommand (Barbecuer receiver):base(receiver)
{
}
public override void ExcuteCommand ()
{
receiver.BakeMutton ();
}
}
}
烤鸡翅命令
using System;
namespace Command
{
//烤鸡翅命令
public class BakeChickenWingCommand:Command
{
public BakeChickenWingCommand (Barbecuer receiver):base(receiver)
{
}
public override void ExcuteCommand ()
{
receiver.BakeChickenWing ();
}
}
}
烤肉串者
using System;
namespace Command
{
//烤肉串者
public class Barbecuer
{
//烤羊肉
public void BakeMutton ()
{
Console.WriteLine ("烤羊肉串!");
}
//烤鸡翅
public void BakeChickenWing(){
Console.WriteLine("烤鸡翅!");
}
}
}
服务员
using System;
using System.Collections;
using System.Collections.Generic;
namespace Command
{
//服务员
public class Waiter
{
private IList<Command> orders=new List<Command>();
//设置订单
public void SetOrder(Command command){
if (command.ToString () == "Command.BakeChickenWingCommand") {
Console.WriteLine ("服务员:鸡翅没有了,请点别的烧烤。");
} else {
orders.Add (command);
Console.WriteLine ("增加订单:" + command.ToString () + "时间:" + DateTime.Now.ToString ());
}
}
//取消订单
public void CancelOrder(Command command){
orders.Remove (command);
Console.WriteLine ("取消订单:" + command.ToString () + "时间:" + DateTime.Now.ToString ());
}
//执行通知
public void Notify(){
if (orders.Count != 0) {
Console.WriteLine ("总的订单为:");
}
foreach (Command cmd in orders) {
cmd.ExcuteCommand ();
}
}
}
}
2.客户端代码如下:
客户端
using System;
using System.Collections;
using System.Collections.Generic;
namespace Command
{
//服务员
public class Waiter
{
private IList<Command> orders=new List<Command>();
//设置订单
public void SetOrder(Command command){
if (command.ToString () == "Command.BakeChickenWingCommand") {
Console.WriteLine ("服务员:鸡翅没有了,请点别的烧烤。");
} else {
orders.Add (command);
Console.WriteLine ("增加订单:" + command.ToString () + "时间:" + DateTime.Now.ToString ());
}
}
//取消订单
public void CancelOrder(Command command){
orders.Remove (command);
Console.WriteLine ("取消订单:" + command.ToString () + "时间:" + DateTime.Now.ToString ());
}
//执行通知
public void Notify(){
if (orders.Count != 0) {
Console.WriteLine ("总的订单为:");
}
foreach (Command cmd in orders) {
cmd.ExcuteCommand ();
}
}
}
}
3.运行结果