博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 命令模式
阅读量:6164 次
发布时间:2019-06-21

本文共 2532 字,大约阅读时间需要 8 分钟。

C#命令模式  图片来源<设计模式之禅>

 

按上图所示 Receiver是实际干活的实现代码就在这个模块中 , Command 是抽象父类,ConcreteCommand是继承Command的类型 抽象的父类中含有Receiver类 用于子类调用其方法,即子类的Execute就是调用的Receiver中实际代码,Invoker就是为了维护

comand方法 

实际代码如下图

1     ///  2     /// 实现类 3     ///  4     public class Barbecuer 5     { 6  7         public void BakeMutton() 8         { 9 10             Console.WriteLine("烤羊肉串");11         }12 13         public void BakeChickenWing()14         {15 16             Console.WriteLine("烤鸡翅");17         }18     }

实现类即 Receiver 代码 

//实际代码 public abstract class Command    {//实现代码的类        protected Barbecuer receiver;        public Command(Barbecuer receiver)        {            this.receiver = receiver;        }//实现的方法        abstract public void ExcuteCommand();    }    public class BakeChickenWingCommand : Command    {        public BakeChickenWingCommand(Barbecuer receiver)            : base(receiver)        {        }        public override void ExcuteCommand()        {            receiver.BakeChickenWing();        }    }    public class BakeMuttonCommand : Command    {        public BakeMuttonCommand(Barbecuer receiver)            : base(receiver)        {        }        public override void ExcuteCommand()        {            receiver.BakeMutton();        }    }

上面为父类与子类 即Command  ,ConcreteCommand 模块

 

再来就是维护类 用于维护command方法 

 

public class Waiter    {            Queue queue = new Queue();        public void SetCommand(Command command)        {            queue.Enqueue(command);        }              public void Notify()        {            while (queue.Count > 0)            {                Command command = queue.Dequeue();                command.ExcuteCommand();            }        }    }

 

 

后面调用代码 

class Program    {        static void Main(string[] args)        {            //生成维护的类            Waiter waiter = new Waiter();            //真正实现代码的类            Barbecuer barecuer = new Barbecuer();            //传入到执行类里面去             Command commandwing = new BakeChickenWingCommand(barecuer);            //传入执行的子类 让子类执行代码             waiter.SetCommand(commandwing);            waiter.SetCommand(commandwing);            waiter.SetCommand(commandwing);            waiter.Notify();            Command command = new BakeMuttonCommand(barecuer);            waiter.SetCommand(command);            waiter.SetCommand(command);            waiter.Notify();            Console.ReadKey();        }    }

命令模式 用出就是维护命令的列队,有需要的时候就把命令加入日志,支持撤销与重做 撤销就要在waiter 类 即Invoker模块中进行维护判断是否把command中的某个子类加入到执行列表中

 

转载于:https://www.cnblogs.com/yangshasha/p/7615079.html

你可能感兴趣的文章
建造者模式 生成器模式 创建型 设计模式(五)
查看>>
《人月神话》读书笔记之第1章焦油坑
查看>>
Effective Objective-C 2.0 Tips 总结 Chapter 3 & Chapter 4
查看>>
留学生题目
查看>>
pythoon介绍、安装环境、基础知识、练习题
查看>>
水溶彩铅的特点&技法运用
查看>>
vue使用laydate.js插件报错laydate.css: Invalid
查看>>
Odoo 强大的开源微信模块 oejia_wx
查看>>
批量创建邮箱通讯组及向通讯组批量添加成员
查看>>
参加51CTO学院软考培训,我通过啦!
查看>>
resharper 7.x 注册码key
查看>>
tomcat的安装以及配置
查看>>
ansible之cron模块
查看>>
ngx_lua 模块提供的指令和API等
查看>>
GHOSTXPSP3系统封装网页图文教程
查看>>
第26讲 python文件的格式化写入
查看>>
Jquery 常用
查看>>
ACL in 和 out
查看>>
从零起步到Linux运维经理,你必须管好的23个细节
查看>>
重读IoC:从DI到CDI (下)
查看>>