执行方案(Command)
这个模式.可能是变化比较多的一个模式.也是最没有定型的一个模式.因为
相对比较灵活.常见的是对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模式.那么调用者就是对函数指针的封装.或是事件代理或事件
监听者.
执行方案(Command)相关推荐
- Python os.system(command),这样执行的command命令,和主程序是异步的吗?
Python os.system(command),这样执行的command命令,和主程序是异步的吗? 是同步执行的. 尚未执行完成的情况下,下面的程序不会继续操作.看下面的例子即可: >> ...
- ECharts series动态加载 可执行方案
ECharts series动态加载 可执行方案 本博客主要讲述 使用ECharts的时候series可动态加载数据的可执行方案. 解决思路:通过执行 clear() 方法来解决 即是:把 serie ...
- 太阳能路灯网站SEO执行方案
这个太阳能路灯网站是我朋友的一个网站,之前一直找不到优化思路与技巧也没有比较懂这块的,就托我帮助他整改此网站的思路与执行方案,所以重庆seo鹏鹏就详细的做了一下可执行的方案! 一.网站状态 从上图我们 ...
- 大象做梦传媒:做好企业年会策划活动执行方案
何为策划,策划就是出点子,出主意.无论是商业运作还是媒体经营,策划都至关重要,一篇好的策划书都离不开策划书模板.策划书范文等.大象做梦传媒致力成为新兴泛娱乐产业的领军者. 企业年会策划活动执行方案一 ...
- 2020年4月2日解决Xmind8自己插入的图片丢失问题的可执行方案
@2020年4月2日解决Xmind8自己插入的图片丢失问题的可执行方案
- 服装产品物流及经营分析执行方案
产品物流及经营分析执行方案 转自: 全球品牌网 王宏宝 商品部门是服装企业经营的核心主导部门以及服装企业内部协作的桥梁部门,通过商品部门对于商品的计划.物流.分析三大方面的工作职能 ...
- IBM服务器硬盘修复,IBM服务器硬盘数据恢复执行方案
原标题:IBM服务器硬盘数据恢复执行方案 1.系统bios中不能正确识别ide硬盘 如果系统bios不能正确识别ide硬盘,请依次确认硬件设备.磁盘.数据线或主板是否全部工作正常. 1. 如果在别的主 ...
- 活动策划大揭秘:如何制定执行方案
对于刚转行做活动策划的小白,我对你的建议,就是两个字"借鉴"! 小白要写出一份优秀的活动策划与执行方案,"借鉴"其实是唯一的方式. 而且而且越资深,借鉴的越多. ...
- 个推技术 | ETL工程师必看!超实用的任务优化与断点执行方案
前言 随着大数据时代的快速发展,企业每天需要存储.计算.分析数以万亿的数据,同时还要确保分析的数据具备及时性.准确性和完整性.面对如此庞大的数据体系,ETL工程师(数据分析师)如何能高效.准确地进行计 ...
最新文章
- 关于loader加载的东西必须是继承sprite
- SAP 用户参数 ME_USE_GRID
- pacman安装ubuntu_为什么tensorflow用户宁可ubuntu繁琐步骤搭建环境,也不用一条命令直达的manjaro?...
- sap生产工单报工_【案例】MES系统助力亨通电缆车间生产效率提升25%
- mysql 数据库锁一般处理
- 中国最有名的8个程序员:不只雷军、张小龙,其中3人都当过首富!
- 向内存中连续存入数据_实例35_在Excel中按条件筛选数据并存入新的表
- vue | 基于vue的城市选择器和搜索城市对应的小区
- PHP 初学者资源收集
- 爬虫获取::after_这种反爬虫手段有点意思,看我破了它!
- 微信小程序设置了合法请求域名,小程序一直提示不在合法域名列别中
- Excel文件打开后不能编辑,可以这样处理
- 小熊派折叠开发板(一)- 开发板介绍
- MATLAB如何固定text在图中的相对位置
- uniapp 自定义弹层时,底部页面滚动而弹层不能滚动
- 微信小程序实现多选框+自定义样式(checkbox)
- S4一般总账科目启用未清项管理(open item management)历史数据转换-RFSEPA02
- UNIX 环境高级编程总结——第五章 标准I/O 库
- 西工大计算机学院2018夏令营,2019年西北工业大学计算机学院全国优秀大学生暑期夏令营开营...
- 十九、MySQL 循环结构之LOOP、WHILE、REPEAT、LEAVE、ITERATE 详解