命令模式的应用

        命令模式用得比较少,一般都是在实际项目开发的后发现需要用的时候我们通过重构来实现。在现实生活中,我们也用这个设计模式;例如:咱们去餐馆点菜的时,服务员美眉会给我们简绍些好吃的菜,若点菜时,厨房没有了会提示我们;吃饭到中途时,菜多可撤销、菜少可添加。我们不需要关心具体是哪个大厨炒菜。这个就是我们今天要讲的设计模式----命令模式。

      将一个请求封装成一个对象,从而使得你可用不同的请求对客户需求进行参数化,对请求排队或者记录日志;以及支持可撤销的操作。


     我们来看看命令类(Command),命令应是命令谁做啥事。所以,我们在命令类中需要定义一个接受者的对象:

 abstract class Command
 {
	//在这个地方定义一个接受者,并且后续继承中执行对应的方法
	protected Receiver receiver;
	public Command(Receiver receiver)
	{
		this.receiver=receiver;
	}
	abstract void Execute();
 }
 class ConcreteCommand:Command
 {
	public ConcreteCommand(Receiver  receiver):base(Receiver receiver)
	{}
	public override void Execute()
	{
		//执行命令,则是转到执行接受者对象 对应的命令
		receiver.Action();
	}
 }
 


       服务员需要收集请求,然后并命令厨师炒菜;

class Invoker
 {
    //针对项目的实际需要,我们可以定义成一个list ,可以增加、删除等
	
	private Command command;
	public void SetCommand(Command command)
	{
		this.command=command;
	}
	public void ExecuteCommand()
	{
	     //若为一组命令,则循环调用并执行
	    command.Execute();
	}
 }

       命令厨师炒菜,那么厨师本身的任务就是执行炒菜;至于怎么炒菜由厨师自己掌控;

class Receiver
 {
   public void Action()
   {
		Console.WriteLine("根据用户的需要执行,对象的操作!");
   }
 }

 客户端代码:

static void Main(string[] arg)
 {
Receiver receiver=new Receiver();
Invoker invoker=new Invoker();
//具体的命令,带有命令谁做啥
ConcreteCommand concretecommand=new ConcreteCommand(receiver);
//1.先负责接收命令
invoker.SetCommand(concretecommand);
//2.通知接收者进行对应的操作
invoker.ExecuteCommand();
 }

       代码无高深之处,仅供和大家一起学习使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值