【C#】大话设计模式- 23 命令模式
创始人
2024-06-03 11:09:55
0

能较容易的设计一个命令队列

在需要的情况下较容易地将命令记入日志

允许接收请求的一方决定是否要否决请求

可以容易实现对请求的撤销和重做

由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易

命令模式把请求一个操作的对象 与 知道怎么执行一个操作的对象 分隔开

在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销、恢复操作等功能时,把原来的代码重构为命令模式才有意义。

using System;
using System.Collections.Generic;
using System.Text;namespace 命令模式
{class Program{static void Main(string[] args){Receiver r = new Receiver();//接收者,执行者Command c = new ConcreteCommand(r);  Invoker i = new Invoker(); //请求一个操作的对象// Set and execute command i.SetCommand(c);i.ExecuteCommand();Console.Read();}}//抽象命令类:  包含一个接收者对象,执行命令(接收者)abstract class Command{protected Receiver receiver;public Command(Receiver receiver){this.receiver = receiver;}abstract public void Execute();}//具体命令 : 实现执行---调用接收者的动作 class ConcreteCommand : Command{public ConcreteCommand(Receiver receiver):base(receiver) { }public override void Execute(){receiver.Action();}}//接收者及执行动作class Receiver{public void Action(){Console.WriteLine("执行请求!");}}//请求操作者    包括一个请求的命令, 执行命令class Invoker{private Command command;public void SetCommand(Command command){this.command = command;}public void ExecuteCommand(){command.Execute();}}}

烤羊肉串、服务员 、客户订单命令

命令: 抽象类、具体类

命令包括接收者对象和执行命令方法

烤肉串者: 仅包括动作。

服务员:维护一个命令队列(可增加、撤销)、通知命令执行

using System;
using System.Collections.Generic;
using System.Text;namespace 命令模式
{class Program{static void Main(string[] args){//开店前的准备Barbecuer boy = new Barbecuer();Command bakeMuttonCommand1 = new BakeMuttonCommand(boy);Command bakeMuttonCommand2 = new BakeMuttonCommand(boy);Command bakeChickenWingCommand1 = new BakeChickenWingCommand(boy);Waiter girl = new Waiter();//开门营业 顾客点菜girl.SetOrder(bakeMuttonCommand1);girl.SetOrder(bakeMuttonCommand2);girl.SetOrder(bakeChickenWingCommand1);//点菜完闭,通知厨房girl.Notify();Console.Read();}}//服务员public class Waiter{private IList orders = new List();//设置订单public void SetOrder(Command command){if (command.ToString() == "命令模式.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(){foreach (Command cmd in orders){cmd.ExcuteCommand();}}}//抽象命令public 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();}}//烤肉串者public class Barbecuer{public void BakeMutton(){Console.WriteLine("烤羊肉串!");}public void BakeChickenWing(){Console.WriteLine("烤鸡翅!");}}}

 

相关内容

热门资讯

我来教大家“掼蛋大师辅助器ap... 亲,掼蛋大师这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,掼蛋大师的开挂软件,名...
我来教大家“开心联盟辅助器ap... 您好,开心联盟这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“友愉棋牌辅助器ap... 您好,友愉棋牌这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“全盛棋牌辅助器ap... 亲,全盛棋牌这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,全盛棋牌的开挂软件,名...
我来教大家“情怀三三麻将辅助器... 我来教大家“情怀三三麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀三三麻将AI软件牌型概...
我来教大家“无锡好运麻将辅助器... 亲,无锡好运麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,无锡好运麻将的开挂...
我来教大家“推筒子辅助器app... 您好,推筒子这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌...
我来教大家“比奇堡辅助器app... 我来教大家“比奇堡辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方神...
我来教大家“新兴茶苑辅助器ap... 我来教大家“新兴茶苑辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“欢乐互动辅助器ap... 我来教大家“欢乐互动辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“东方互娱辅助器ap... 亲,东方互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,东方互娱的开挂软件,名...
我来教大家“天天乐清麻将辅助器... 我来教大家“天天乐清麻将辅助器app官方下载最新版本更新”详细分享开挂一、天天乐清麻将AI软件牌型概...
我来教大家“唐三彩辅助器app... 我来教大家“唐三彩辅助器app官方下载最新版本更新”详细分享开挂一、唐三彩AI软件牌型概率发牌机制”...
我来教大家“Y0辅助器app官... 我来教大家“Y0辅助器app官方下载最新版本更新”详细分享开挂一、Y0AI软件牌型概率发牌机制”必胜...
我来教大家“天天互娱辅助器ap... 亲,天天互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,天天互娱的开挂软件,名...
我来教大家“悟空竞技麻将辅助器... 亲,悟空竞技麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,悟空竞技麻将的开挂...
我来教大家“情怀开化麻将辅助器... 我来教大家“情怀开化麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀开化麻将AI软件牌型概...
我来教大家“龙炎互娱辅助器ap... 我来教大家“龙炎互娱辅助器app官方下载最新版本更新”详细分享开挂一、龙炎互娱AI软件牌型概率发牌机...
我来教大家“闲逸碰胡辅助器ap... 亲,闲逸碰胡这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,闲逸碰胡的开挂软件,名...
我来教大家“友聚麻将辅助器ap... 我来教大家“友聚麻将辅助器app官方下载最新版本更新”详细分享开挂一、友聚麻将AI软件牌型概率发牌机...