usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceWF

{//工程名称:通过工作流状态进行工作流管理///Author:Evan Lee///编写时间:2011-05-08///博客地址:http://www.cnblogs.com/magic_evan///classProgram

{//通过工作流状态进行工作流管理//staticvoidMain(string[] args)

{intstart=0;while(true)

{//模板方式的工作流可以编写成模板工厂类的方式int.TryParse(Console.ReadLine(),outstart);

Work work=null;

DictionarystepList=newDictionary();//工作流模板的每一步的的状态switch(start)

{case1://输入1的时候启用第1个工作流的模板work=newWork(1);

stepList.Add(1,0);

stepList.Add(2,0);

work.StepList=stepList;break;case2://输入2的时候启用第2个工作流的模板work=newWork(2);

stepList.Add(1,1);

stepList.Add(2,0);

stepList.Add(3,0);

work.StepList=stepList;break;default:return;//其它跳出}

work.DoWork();

}

}

}//工作流抽象状态publicabstractclassState

{publicabstractvoidDoWork(Work w);

}//工作流1publicclasswf1 : State

{publicoverridevoidDoWork(Work w)

{if(w.IsStop)return;if(w.StepList[w.CurrentStep]>0)

{

Console.WriteLine("{0}步工作流完成!显示内容", w.CurrentStep=w.CurrentStep-1);

}else{

Console.WriteLine("{0}步工作流未完成!显示输入内容", w.CurrentStep=w.CurrentStep-1);

w.IsStop=true;

}

w.SetState(newwf1_1());

w.DoWork();

}

}//工作流1-1publicclasswf1_1 : State

{publicoverridevoidDoWork(Work w)

{if(w.IsStop)return;if(w.StepList[w.CurrentStep]>0)

{

Console.WriteLine("{0}步工作流完成!显示内容", w.CurrentStep=w.CurrentStep-1);

}else{

Console.WriteLine("{0}步工作流未完成!显示输入内容", w.CurrentStep=w.CurrentStep-1);

w.IsStop=true;

}

w.SetState(newwfend());

w.DoWork();

}

}//工作流2publicclasswf2 : State

{publicoverridevoidDoWork(Work w)

{if(w.IsStop)return;if(w.StepList[w.CurrentStep]>0)

{

Console.WriteLine("{0}步工作流完成!显示内容", w.CurrentStep=w.CurrentStep-1);

}else{

Console.WriteLine("{0}步工作流未完成!显示输入内容", w.CurrentStep=w.CurrentStep-1);

w.IsStop=true;

}

w.SetState(newwf2_1());

w.DoWork();

}

}//工作流2-1publicclasswf2_1 : State

{publicoverridevoidDoWork(Work w)

{if(w.IsStop)return;if(w.StepList[w.CurrentStep]>0)

{

Console.WriteLine("{0}步工作流完成!显示内容", w.CurrentStep=w.CurrentStep-1);

}else{

Console.WriteLine("{0}步工作流未完成!显示输入内容", w.CurrentStep=w.CurrentStep-1);

w.IsStop=true;

}

w.SetState(newwf2_2());

w.DoWork();

}

}//工作流2-2publicclasswf2_2 : State

{publicoverridevoidDoWork(Work w)

{if(w.IsStop)return;if(w.StepList[w.CurrentStep]>0)

{

Console.WriteLine("{0}步工作流完成!显示内容", w.CurrentStep=w.CurrentStep-1);

}else{

Console.WriteLine("{0}步工作流未完成!显示输入内容", w.CurrentStep=w.CurrentStep-1);

w.IsStop=true;

}

w.SetState(newwfend());

w.DoWork();

}

}publicclasswfend : State

{publicoverridevoidDoWork(Work w)

{

Console.WriteLine("工作流完成!显示内容");

}

}//工作publicclassWork

{privateState current;publicWork(intwfModel)

{switch(wfModel)

{case1: current=newwf1();break;case2: current=newwf2();break;

}

}privateDictionarystepList=newDictionary();//步骤,状态///publicDictionaryStepList

{get{returnstepList; }set{ stepList=value; }

}//是否启用下一个工作流///privateboolisStop=false;publicboolIsStop

{get{returnisStop; }set{ isStop=value; }

}//当前的步骤///privateintcurrentStep=0;publicintCurrentStep

{get{return(currentStep+=1); }set{ currentStep=value; }

}//设置当前的工作流实现//publicvoidSetState(State s)

{

current=s;

}//操作工作流///publicvoidDoWork()

{

current.DoWork(this);

}

}

}

Java状态模式实现工作流_关于使用“状态模式”做工作流概要。相关推荐

  1. stm32l0的停止模式怎么唤醒_关于Mac睡眠模式,你不知道的那些事

    关于Mac电脑上的睡眠模板,你知道多少呢?对于你一台全新的Mac,我们最关注的可能就是电池的寿命.随着我们的使用时间增长,mac电脑的电池容量会逐渐减少,最后不得不使用电源.想要更好的保养电池寿命,我 ...

  2. 策略模式和工厂模式的区别_设计模式系列 — 策略模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

  3. java中mvc模式是什么_什么是MVC模式 MVC模式中三者之间关系

    MVC模式设计的初衷是,一旦一个项目的代码量变大的时候,src文件夹中可以写java代码,web文件夹中也可以写jsp代码.除此之外src中还可以写好多包,web文件夹中还可以写好多文件夹,现在假如新 ...

  4. java的mvc模式是什么_什么是mvc模式

    MVC是一个架构,或者说是一个设计模式,它就是强制性使应用程序的输入,处理和输出分开.将一个应用程序分为三个部分:Model,View,Controller. 原理图: 分析: Model模型(完成业 ...

  5. java游戏boss是冰龙_炉石传说冒险模式冰龙区Boss技能及过关卡牌奖励

    炉石传说冒险模式:纳克萨玛斯的诅咒将在2014年8月20日凌晨开放最后一个大区:冰龙巢穴,让我们先人一步了解构造区的所有相关资讯吧! 1.萨菲隆 生命值 普通难度:30 英雄模式:45 英雄技能 冰霜 ...

  6. java游戏boss是冰龙_炉石传说冒险模式冰龙区BOSS克尔苏加德打法攻略

    <炉石传说>冒险模式"纳克斯玛斯的诅咒"最后一个区域"冰龙区"现已开放.本区仅有两个BOSS,但是难度显然比之前的区域有所提高,英雄模式下更是如此. ...

  7. 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式

    设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...

  8. activiti 工作流_分享:springboot中关于工作流activiti的搭建

    概念 工作流产品使用activiti的算是比较多了,自带了一套UI界面,可以直接使用,用来设计流程,下面简单总结一下它的步骤: 1 设计模型 2 发布为流程,一个模型可以发布多个版本的流程 3 建立一 ...

  9. 手机900e模式如何救_手机护眼模式真的有用吗?长时间看手机如何保护视力?...

    [智友问答]手机护眼模式真的有用吗?长时间看手机如何保护视力 最近笔者刚刚更换了新手机,有一天在使用过程无意中碰到了某个开关,屏幕颜色变成了淡淡的黄色,等反应过来才明白碰到了护眼模式的开关,手机上的护 ...

最新文章

  1. CODE FESTIVAL 2017 qual B
  2. 2021年5月信息系统项目管理师上午真题
  3. python中class __str__怎么用_python中下划线的作用
  4. java 数字运算异常_Java基础之:异常及异常处理
  5. Selenium API-WebElement 属性
  6. ​知者见于未萌:百度CTO王海峰与中国 AI 三十年
  7. android手机charles证书下载
  8. 使用ArcGIS软件进行投影变换和坐标校正
  9. 深度linux deepin 内存,【转载】深度Deepin国产操作系统使用体验报告!
  10. LVGL V8之Event bubbling
  11. CUDA总结:Occupancy
  12. vue网页打印针式打印机内容显示不全
  13. java下载压缩包文件zip
  14. qt 打印 刻度尺 曲线 复杂图像
  15. ASF无法启动?试试这两种操作吧
  16. 【SwiftUI模块】0007、SwiftUI新手指引-新手指示-聚光灯介绍说明
  17. 2021(接近2022)linux(ubuntu16.04)安装cuda跑深度学习步骤以及踩坑过程(ELF标头无效、导入torch后torch.cuda.is_available()为False等等)
  18. 拥有全国性物流网络却只靠卖书赚微薄利润的李国庆, 最终倒下了
  19. 超融合一体机成为数据中心的必需品
  20. C++从零开始区块链:P2P模块之UDP数据包分组排序

热门文章

  1. 关于java的一个典型的动态代理
  2. leetcode_linearList03
  3. mac下没有设置 SVN_EDITOR....错误解决方法
  4. POJ 2186 Popular Cows
  5. irsend 树莓派 php,用树莓派给家用电器加上智能(红外篇)
  6. 判断file空_File类的基本用法
  7. php 调用vs2013 dll文件,VScode能编辑DLL库文件么
  8. oracle在日期区间分页查询,Oracle 日期分页
  9. 3gpp协议_【5G学习笔记】3GPP 5G协议分类清单大全
  10. python如何训练模型生产_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...