《大话设计模式》学习笔记19:命令模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了《大话设计模式》学习笔记19:命令模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2752字,纯文字阅读大概需要4分钟。
内容图文
![《大话设计模式》学习笔记19:命令模式](/upload/InfoBanner/zyjiaocheng/1290/9add70b344d34765a69a4025d251a6dc.jpg)
烧烤店点餐示例:
实现1:
1.Receiver:
public class Barbecuer { public void BakeMutton() { Console.WriteLine( " 烤羊肉串! " ); } public void BakeChickenWing() { Console.WriteLine( " 烤鸡翅! " ); } }
2.Command:
public abstract class Command { protected Barbecuer receiver; public Command(Barbecuer receiver) { this.receiver = receiver; } publicabstractvoid ExcuteCommand(); }
3.ConcreteCommand:
public class BakeMuttonCommand:Command { public BakeMuttonCommand(Barbecuer receiver) : base (receiver) { } public override void ExcuteCommand() { receiver.BakeMutton(); } }
public class BakeChikenWingCommand:Command { public BakeChikenWingCommand(Barbecuer receiver) : base (receiver) { } public override void ExcuteCommand() { receiver.BakeChickenWing(); } }
4.Invoker:
public class Waiter { private Command command; public void SetOrder(Command command) { this.command = command; } publicvoid Notify() { command.ExcuteCommand(); } }
5.客户端代码:
class Program { static void Main(string[] args) { Barbecuer barbecuer = new Barbecuer(); Command bakeMuttonCommand1 = new BakeMuttonCommand(barbecuer); Command bakeMuttonCommand2 = new BakeMuttonCommand(barbecuer); Command bakeChickenWingCommand1 = new BakeChikenWingCommand(barbecuer); Waiter waiter = new Waiter(); waiter.SetOrder(bakeMuttonCommand1); waiter.Notify(); waiter.SetOrder(bakeMuttonCommand2); waiter.Notify(); waiter.SetOrder(bakeChickenWingCommand1); waiter.Notify(); } }
实现2:增加命令队列、记录日志、否决请求、请求撤销
1.修改Invoker:
public class Waiter { private IList<Command> commands = new List<Command>();//命令队列publicvoid SetOrder(Command command) { if(command.ToString()=="Command.BakeChikenWingCommand") { Console.WriteLine("服务员:鸡翅没有了,请点别的烧烤。");//否决请求 } else { commands.Add(command); Console.WriteLine("增加订单:" + command.ToString() + " 时间:" + DateTime.Now.ToString());//记录日志 } } publicvoid Notify() { foreach(var command in commands) { command.ExcuteCommand(); } } }
2.修改客户端代码:
class Program { static void Main(string[] args) { Barbecuer barbecuer = new Barbecuer(); Command bakeMuttonCommand1 = new BakeMuttonCommand(barbecuer); Command bakeMuttonCommand2 = new BakeMuttonCommand(barbecuer); Command bakeChickenWingCommand1 = new BakeChikenWingCommand(barbecuer); Waiter waiter = new Waiter(); waiter.SetOrder(bakeMuttonCommand1); //waiter.Notify(); waiter.SetOrder(bakeMuttonCommand2); //waiter.Notify(); waiter.SetOrder(bakeChickenWingCommand1); waiter.Notify(); } }
命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。优点:
1.较容易设计一个命令队列;
2.在需要的情况下,可以较容易地将命令记入日志;
3.允许接收请求的一方决定是否要否决请求;
4.较容易实现对请求的撤销和重做;
5.由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。
敏捷开发的原则告诉我们,不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难。只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。
原文:http://www.cnblogs.com/walden1024/p/4524560.html
内容总结
以上是互联网集市为您收集整理的《大话设计模式》学习笔记19:命令模式全部内容,希望文章能够帮你解决《大话设计模式》学习笔记19:命令模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。