我的理解:
命令池(采用堆或栈皆可)维护着一组命令集合。
只要这些命令实现同个命令接口或者命令抽象类,就能够被命令池依次执行。

class App
{
    static void Main()
    {
        //命令模式:将无论哪个实例的方法抽象成对应的命令放入命令池。命令池会自动执行。
        Printer printer = new Printer();
        Scanner scanner = new Scanner();
        PrintCommand pc = new PrintCommand(printer);
        ScanCommand sc = new ScanCommand(scanner);
        CommandQueue.Instance.Enquee(pc);
        CommandQueue.Instance.Enquee(sc);
    }
}
//ICommand命令池,计时器每过一段时间取出一个命令执行
public class CommandQueue : Queue<ICommand>
{
    单例#region 单例
    private static class CommandQueueInstance
    {
        public static readonly CommandQueue Instance = new CommandQueue();
    }
    public static CommandQueue Instance
    {
        get
        {
            return CommandQueueInstance.Instance;
        }
    }
    #endregion
    
    private Timer _t;

    private CommandQueu()
    {
        _t = new Timer(new TimerCallback(Execute), null, 5000, 200);
    }

    private void Execute(object obj)
    {
        if (this.Count > 0)
        {
            ICommand cmd = this.Dequeue();
            cmd.Execute();
        }
    }
}
//所有命令的抽象,这里使用接口比较好
public interface ICommand
{
    void Execute();
}
//打印机打印的命令
public class PrintCommand : ICommand
{
    private Printer _printer;
    public PrintCommand( Printer printer)
    {
        _printer = printer;
    }
    public virtual void Execute()
    {
        _printer.Print();
    }
}
//扫描仪扫描的命令
public class ScanCommand : ICommand
{
    private Scanner _scanner;
    public ScanCommand(Scanner scanner)
    {
        _scanner = scanner;
    }
    public virtual void Execute()
    {
        _scanner.Scan();
    }
}
//打印机提供打印方法
public class Printer
{
    public void Print()
    {
        Console.WriteLine("Print.");
    }
}
//扫描仪提供扫描方法
public class Scanner
{
    public void Scan()
    {
        Console.WriteLine("Scan.");
    }
}

转载于:https://www.cnblogs.com/yurichou/archive/2007/08/13/854151.html

[设计模式] 15.Command 命令模式相关推荐

  1. 【白话设计模式八】命令模式(Command)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  2. 设计模式学习笔记(十七)——Command命令模式

    设计模式学习笔记(十七)--Command命令模式 Command命令模式介绍: Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,"行为请求者"与 ...

  3. C++设计模式-Command命令模式

    Command命令模式 作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于"行为请求者"与"行 ...

  4. Head First 设计模式中的命令模式 的一个错误

    最近在看Head First 设计模式,其中命令模式中有讲到实现撤销功能,并且作者还出了一道题, 下面的是书中习题: public class MarcoCommand implements Comm ...

  5. 走穿java23种设计模式-15责任链模式详解

    走穿java23种设计模式-15责任链模式详解 责任链模式是一种常见的行为模式. 一.责任链模式的现实场景 习伟过生日邀请了很多朋友到KTV一起庆祝,为了增加欢乐的气氛,习伟建议大家一起玩击鼓传花的游 ...

  6. 设计模式之禅-命令模式

    目录 命令模式 例子 定义 优点 缺点 使用场景 扩展 增加需求 回滚 完美的Command 命令模式 例子 外包甲方项目..刚开始,客户(也就是旅行社,甲方)很乐意和我们每个组探讨,比如和需求组讨论 ...

  7. 步步为营 .NET 设计模式学习笔记 九、Command(命令模式)

    概述 在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务& ...

  8. 设计模式学习笔记——命令模式(Command)

    1.特点:将请求发送者与具体实现者解耦,可对请求排列.取消.重做,支持事务.(多请求,单处理) 2.概念:属于对象的行为模式[GOF95].命令模式又称为行动(Action)模式或交易(Transac ...

  9. [C++设计模式] command 命令模式

    在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合". 但在某些场合,比方要对行为进行"记录.撤销/重做.事务&qu ...

最新文章

  1. 编译安装keepalived-1.2.2.tar.gz报错处理
  2. SQL Server 2016新特性:列存储索引新特性
  3. Flex的NumericStepper控件
  4. 每日一皮:你偷偷藏私房钱时被老婆发现的样子...
  5. 自动装配——@Autowired@Qualifier@Primary
  6. TRUNCATE,DELETE,DROP的区别
  7. IOS上的 Audio Memos SE 如何分享和传输录音到电脑?
  8. [scala-spark]11. RDD控制操作
  9. 点击下载!《阿里云SRE技术期刊》2021年5月刊发布啦!
  10. 在MySQL上使用带密码的GlassFish JDBC安全性
  11. Excel还是那些事
  12. 2020年互联网人年终模板,是你在找的吗?
  13. windows 下 vmware 安装 Mac X lion 10.7 终极教程!
  14. 从Java到C++——常量的使用规则
  15. 阶段性总结、反思、计划
  16. 【POJ3335】Rotating Scoreboard(多边形的内核-----半平面交+特殊情况)
  17. 让你的软件支持繁体中文
  18. ERP ERP原理与应用试题(附答案)
  19. 【RFID】RFID的标准体系
  20. 三角函数π/2转化_高中诱导公式全集,有了它,三角函数公式一网打尽

热门文章

  1. 将函数实现放在头文件中
  2. 8086汇编-实验7-制表
  3. [Jarvis OJ - PWN]——[XMAN]level2(x64)
  4. 在php里面怎么做日期范围,如何在php中获得上周的日期范围?
  5. php发送验证图片,php生成图片验证码_PHP教程
  6. 计算机的主存储器可以分为哪两类,2017年计算机应用基础模拟试题「答案」(2)...
  7. 5G NR 决定CORESET0频域位置的offset取值由来
  8. 深入理解Java类加载器:Java类加载原理解析
  9. oracle cast multiset table 语法演示
  10. Intel(R)Turbo Boost Technology Driver上面显示为感叹号