设计模式(十九)——命令模式

命令模式(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.运行结果

UML图


源码下载地址 :https://gitee.com/ZhaoYongshuang/DesignPattern.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值