Gof定义

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

理解

对命令模式我有一些肤浅的认识,也许是不对的。但我还是写一下。其实在我理解的命令模式很简单的。比如,A想去超市买菜,B想去超市买苹果,C想去超市买鱼。那么这时候要是有一个接收命令的人,那该多好哇。这个人接收A的命令,接收B的命令,接收C的命令,等所有人的命令都接收完后,他就开始去DO。当然如果A发过命令后,突然觉的还是 自己去买好了不买好了,那又有相应的CANCEL命令。

CODE

    class Program{static void Main(string[] args){Command cmd1 = new BakeChickenWingCommand();Command cmd2 = new BakeMuttonCommand();Waiter waiter = new Waiter();waiter.SetOrder(cmd1);waiter.SetOrder(cmd2);waiter.Notify();Console.WriteLine("-----------------------------------------");waiter.CancelOrder(cmd1);waiter.Notify();Console.ReadLine();}}class Waiter{private IList<Command> orders = new List<Command>();//设置订单public void SetOrder(Command command){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();}}}//抽象命令abstract class Command{abstract public void ExcuteCommand();    }//烤羊肉串命令class BakeMuttonCommand : Command{public override void ExcuteCommand(){Console.WriteLine("烤羊肉串");}   }//烤鸡翅命令class BakeChickenWingCommand : Command{public override void ExcuteCommand(){Console.WriteLine("烤鸡翅命令");}}

大话设计模式里的CODE

View Code

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.Notify();girl.SetOrder(bakeMuttonCommand2);girl.Notify();girl.SetOrder(bakeChickenWingCommand1);girl.Notify();Console.Read();}}//服务员public class Waiter{private Command command;//设置订单public void SetOrder(Command command){this.command = command;}//通知执行public void Notify(){command.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("烤鸡翅!");}}}

可以对比一下代码的不同!!会发现我删了一些,更简单的实现了。

转载于:https://www.cnblogs.com/cxeye/archive/2012/09/22/2698088.html

设计模式- 命令模式相关推荐

  1. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  2. 设计模式 命令模式 实例_根据您的命令-命令设计模式

    设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...

  3. C语言设计模式——命令模式

    C语言设计模式--命令模式 好处:让代码清晰明了,容易添加和删除,易维护. 哪些地方会用到命令模式?(列出几个常见的例子) 1.按键处理,每个按键按下得到一个索引(指的就是命令),一个按键对应一个处理 ...

  4. C语言实现设计模式—命令模式

    文章目录 C语言设计模式--命令模式 传统的实现方式如下:(伪代码) 命令模式优化 UML 用例说明 实现流程 command.h command.c main 总结 C语言设计模式--命令模式 好处 ...

  5. 游戏设计模式 - 命令模式在Unity中的应用(C#)

    游戏设计模式 - 命令模式在Unity中的应用(C#) 实测:这是一篇简单易懂的文章-> https://zhuanlan.zhihu.com/p/46937284

  6. C++设计模式——命令模式(command pattern)

    一.原理讲解 别名动作(action),事务(transaction). 1.1意图 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作 ...

  7. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  8. 小菜学设计模式——命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 背景 外面小摊与店面的比较,你就会发现,店面似乎更加容易管理,为什么呢?因为在客户与老板自己新增了很多员工,这些员工各司其职, ...

  9. 设计模式 命令模式 之 管理智能家电

    继续设计模式哈,今天带来命令模式,二话不说,先看定义: 定义:将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 这尼玛定义,看得 ...

最新文章

  1. OptiTrack专为VR主题公园推出了主动追踪方案,可降低40%成本
  2. SAP WM 物料主数据里的Palletization Data
  3. 图解自监督学习,人工智能蛋糕中最大的一块
  4. 转:Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比
  5. python编写程序接收字符串_Python字符串操作
  6. mysql锁表更新_Mysql InnoDB 数据更新导致锁表
  7. win7系统修复工具_205个电脑系统修复小工具, 联想工程师专用!
  8. python实现链表的删除_B站上的免费Python课程
  9. Java 蓝桥杯 矩阵乘法
  10. lintcode: Check Sum of Square Numbers
  11. java的枚举_Java 枚举
  12. jQuery实现点击显示和隐藏内容
  13. DAT与IDX格式文件如何打开?
  14. kaldi 声纹识别系统(1)原理解析:基于x-vector
  15. python网络爬虫之如何伪装逃过反爬虫程序的方法
  16. ansi编码_刨根究底字符编码之零——前言
  17. uniApp uview图片懒加载
  18. win10磁盘分区图文教程
  19. 记录我看的密码学方案中的技术,Shamir秘密共享,Schnorr零知识证明,EIGamal密码体制
  20. autoJS pro-手机自动化脚本(douyin App模拟人工操作点赞、评论、收藏、转发)

热门文章

  1. 剑破冰山—Oracle开发艺术 前言
  2. Vue 组件库 HeyUI@1.19.0 发布,新增 Icon 图标
  3. Eclipse中CVS版本管理
  4. 【模板】割点(割顶)
  5. Intellij IDEA中的Mybatis Plugin破解
  6. 吐槽一下现在的代码编辑器
  7. Microsoft Visual Studio 2010 Service Pack 1
  8. js作用域链以及全局变量和局部变量
  9. 构建之法读书笔记03
  10. JQuery面试题1