执行方案(Command)

原创 2003年07月15日 13:36:00

 

这个模式.可能是变化比较多的一个模式.也是最没有定型的一个模式.因为

相对比较灵活.常见的是对GUI图形界面的命令封装这样即使更改界面元素只

要功能不变那么也不影响执行效果.就如同以前面向过程的编程环境那要.吧

功能封装到多个过程.进行调用.但是Command模式.又一个优点就是可以还原

把以前做过的工作还原到未做工作之前.这个也就是事务性.这就必须要一个

事务列表来维护.事务回滚.当然如果只是单任务那么只需要一个状态就可以

判断是否执行.下面在引出几个职能.一个是调用者.他负责实际的调用命令

一个是接收者.他负责告表示命令执行的效果.那么最后的就是命令本身.

也就是实际工作.他们之间的关系是.客户通过调用者调用命令.命令执行完毕

返回执行情况.同时命令具备事务性.如果执行情况没有成功要还原到原点.

客户通过执行情况判断具体状态.

那么下面我还是假设一种具体情况.我并打算用图形界面因为.那么没有通用

性.而且Command模式也不一定要用到图形界面中.假设客户要申请一个号码可

是号码不能是3或3的倍数.下面我们来模拟具体情况.

//构造命令
interface ICommand{
   bool state{get; set;}//记录事务状态
   int  Execute();
   void UnExecute();//保证事务回滚
}

public class NumCommand : ICommand{
      private bool State=false;//事务状态
    
      public bool state{
          get{return State;}
          set{State=value;}
      }
     
      public  int  Execute( ){
           int revalue;
           state=true;//表示已执行
           this.r=fr;//指定一个命令接收者
           Random rd=new Randmo();
           revalue=(int)(rd.NextDouble()*100);
           this.r.Show(revalue);//呈现具体
           return revalue;
      }
       
      public void UnExecute(){
         state=false;//状态回滚
      }
}


//构造接收者
interface IReceiver{}
public class  Receiver:IReceiver{
    public void Show(int Number){
       Console.WriteLine("您申请的序号为:"+Number);
    }
}

//调用者(调用者维护事务),这里的调用者相当实际客户的代理.

public class Invoker{
   private ICommand command;
   private IReceiver receiver;//由接收者负责具体的表示

   //装入实际命令
   public void InstallCommand(ICommand c){
            this.command=c;
   }
  
   //调用实际功能
   public InvokerExecute(IReceiver r){
        Rollback:
        int Number=this.command.Execute();
        if(Number%3)//是3的倍数{
         this.command.UnExecute();
         goto Rollback;//事务回滚  
        }
        else{
           r.Show(Number);
        }
   }
}

//客户调用
public class Client {
        public static int Main(string[] args){
              ICommand  command=new NumCommand();
              IReceiver  r=new Receiver();
              Invoker  i=new Invoker();
             
              i.InstallCommand(c);//装入命令
              i.InvokerExecute(r);//表示执行 
              return 0;
        }
}


实际上.客户可以装入任意的命令.客户的表示也是可以是任意的.也就是说

调用者只负责.事务的维护和把命令对应到具体的接收者上去.如果是界面

中的Command模式.那么调用者就是对函数指针的封装.或是事件代理或事件

监听者.

laravel命令行Command的使用

有一个需求,需要通过脚本刷新数据库字典,由于要连接sqlserver,而且为了方便和安全我们得编写到laravel框架下,因此我们使用laravel的artisan命令来实现。1、首先进入到larav...
  • phpwww
  • phpwww
  • 2015年03月17日 14:05
  • 5526

linux下执行脚本,提示Command not found解决办法

遇上了这个坑,搞了好久没搞定,参考了前辈的文章,终于搞好了,分享如下 原文地址:http://www.cnblogs.com/GordonWorld/archive/2012/03/19/240...
  • xbnlkdbxl
  • xbnlkdbxl
  • 2016年10月27日 14:42
  • 9375

通过DVWA学习命令执行漏洞(Command Execution)

通过DVWA学习命令执行漏洞(Command Execution)   作为初学者的笔记,有何问题或建议请大牛们不吝指教~ 在系统终端中,要想输入多条命令,可以在一条命令结束之后用分号(;)来隔开进而...
  • SKI_12
  • SKI_12
  • 2017年01月20日 12:26
  • 2181

linux下提示:command not find解决方法

在linux下我们经常输入某些命令时经常出现提示说:command notfind。对此网上已经有很多人对此作了阐述,但是对于菜鸟来说可能仍然不理解,下面我我对这个做一下详细说明。   首先 当出...
  • liyuan_669
  • liyuan_669
  • 2014年04月22日 23:41
  • 1682

Mac系统终端命令行不执行命令 总出现command not found解决方法

mac 终端输入命令后出现-bash: export: `/usr/local/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/s...
  • HDFQQ188816190
  • HDFQQ188816190
  • 2017年03月16日 17:07
  • 1329

C#:执行SQL语句Command

Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。Command对象主要有以下几种方式: ►SqlCommand:用于向SQL Server数据库发...
  • vjudge
  • vjudge
  • 2014年07月28日 23:06
  • 2860

root下command not found的解决以及su root密码不正确的解决

给和我一样的小白…… 问题描述: 我在terminal中输入sudo -s切换到root,发现ifconfig,service,chkconfig这三个命令都提示command not f...
  • yunixiang
  • yunixiang
  • 2015年03月12日 10:07
  • 2436

Laravel5 (cli)命令行执行脚本及定时任务

本文转自:http://www.cnblogs.com/chunguang/p/5660074.html Artisan是Laravel自带的命令行接口名称,它提供了很多有用的命令想要查看所有...
  • glovenone
  • glovenone
  • 2016年09月05日 10:42
  • 6983

Tomcat关闭过程

观察org.apache.catalina.startup.Catalina.java中的start()方法,我们发现Serever启动后,还要执行如下代码: /** * Await...
  • peerless_hero
  • peerless_hero
  • 2016年12月01日 22:44
  • 652

WPF中的命令(Command)

WPF中的命令系统由几个基本要素构成,它们是: 命令(Command): WPF的命令实际上就是实现了ICommand接口的类,平时使用最多的是RoutedCommand类。 ICommand...
  • liguo9860
  • liguo9860
  • 2013年08月31日 12:23
  • 9137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:执行方案(Command)
举报原因:
原因补充:

(最多只允许输入30个字)