首页 > 其他分享 >命令模式

命令模式

时间:2022-11-21 11:36:34浏览次数:32  
标签:items decimal 模式 命令 params result Receiver public

计算器例子:

  public class Command : ICommand
    {
        private Queue<decimal> queue = new Queue<decimal>();
        public decimal[] GetResults=>queue.ToArray();
        private Receiver _receiver;
        public Receiver Receiver { get => _receiver; set => _receiver=value; }

        public decimal Execute(params decimal[] items)
        {
            var result = _receiver.Cal(items);
            queue.Enqueue(result);
            return result;
        }

        public decimal Reset()
        {
            return queue.Dequeue();
        }
    }

    public class Add : Receiver { public decimal Cal(params decimal[] items) { return items.Aggregate((x, y) => x + y); } }
    public class Sub : Receiver { public decimal Cal(params decimal[] items) { return items.Aggregate((x, y) => x - y); } }
    public class Mul : Receiver { public decimal Cal(params decimal[] items) { return items.Aggregate((x, y) => x * y); } }
    public class Div : Receiver { public decimal Cal(params decimal[] items) { return items.Aggregate((x, y) => x/ y); } }
    public interface Receiver
    {
        decimal Cal(params decimal[] items);
    }
    
    public interface ICommand
    {
        decimal Execute(params decimal[] items); 
        Receiver Receiver { get; set; }
    }
    public interface IClient
    {
        decimal Execute(params decimal[] items);
        decimal Reset();
    }
    
    public class Client:IClient
    {
        private Queue<decimal> queue = new Queue<decimal>();
        private ICommand _command;
        public Client(ICommand command)
        {
            _command = command;
        }

        public decimal Execute(params decimal[] items)
        {
            decimal result = _command.Execute(items);
            queue.Enqueue(result);
            return result;
        }

        public decimal Reset()
        {
           return queue.Dequeue();
        }
    }

 

 

客户端实现:

Command addCommand = new Command();
addCommand.Receiver = new Add();
IClient client = new Client(addCommand);
var result = client.Execute(1, 2, 3, 4, 5);
result = client.Reset();

Command subCommand = new Command();
subCommand.Receiver = new Sub();

 

标签:items,decimal,模式,命令,params,result,Receiver,public
From: https://www.cnblogs.com/morec/p/16910849.html

相关文章

  • CTFshow刷题日记-WEB-命令执行下55-77
    web55if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i",$c)){system($c);}不能出现英文字符方法1?c=/???/?......
  • 114:设计模式_工厂模式实现
       设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是:GOF(GoupOfFour)23种设计模式。当然,我们没有必要全部学习......
  • 命令源码文件
    我们已经知道,环境变量GOPATH指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件。这里的源码文件又分为三种,即:命令源码文件、库源码文件和测试......
  • date命令
    一、简介Linuxdate命令可以用来显示或设定系统的日期与时间。date[OPTION]...[+FORMAT]date[-u][-ddatestr][-sdatestr][--utc][--universal][--date=datestr]......
  • 【设计模式】原型模式:猴头,我叫你一声你敢答应吗?
    1原型模式1.1概述原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知......
  • Linux下的压缩和解压缩命令——gzip/gunzip
    gzip命令gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压......
  • mysql5.7以上的启停命令
    1、启动mysqlserversystemctlstartmysqld#启动程序systemctlenablemysqld#开机自运行systemctlstatusmysqld#查看状态2、查看初始密码......
  • 后端开发必备Linux命令汇总
    查看Linux系统信息  arch      #显示机器的处理器架构(1)uname -m  #显示机器的处理器架构(2)uname -r  #显示正在使用的内核版本dmidecode -q    ......
  • Python当中的pip常用的一些命令
    安装如果是需要自己另外安装pip包的,在已经配置好Python的环境当中运行下面这个命令行py-mensurepip--upgrade升级要是你觉得自己的pip版本有点低,想要升级一下的话......
  • linux常用操作命令
    top:查看所有进程的资源占用情况,按cpu占用排序第三行为CPU的信息:有几个CPU,就会显示几行参数释义  us      表示用户空间程序的c......