博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习之状态模式:请假流程
阅读量:6800 次
发布时间:2019-06-26

本文共 1754 字,大约阅读时间需要 5 分钟。

工作流中的请假流程

某人提出请假申请,先由项目经理审批,如果项目经理不同意,审批就直接结束
如项目经理同意,再看是否超过3天,如果三天以内,审批直接结束

否则,交给部门经理,部门经理审核后,无论是否同意,审批直接结束

 

\

状态类

 

1
2
3
4
5
package
com.cmc;
 
public
abstract
class
State {
    
public
abstract
void
shenPi(Work w);
}

项目经理类,继承了状态类,并实现了状态由项目经理审批转移至部门经理审批:

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package
com.cmc;
 
public
class
ProjectManager
extends
State {
 
    
@Override
    
public
void
shenPi(Work w) {
        
if
(w.isManagermentAccept()==
false
){
            
System.out.println(
"项目经理不同意,审批结束!"
);
        
}
else
{
            
if
(w.getDay()<=
3
){
                
System.out.println(
"请假时间在三天以内,项目经理同意,审批结束"
);
            
}
else
{
                
System.out.println(
"请假时间大于三天,移交给部门经理处理!"
);
                
w.setCurrent(
new
PartmentMeneger());
                
w.shenPi();
            
}
        
}
    
}
 
}

部门经理类:

 

 

1
2
3
4
5
6
7
8
9
10
package
com.cmc;
 
public
class
PartmentMeneger
extends
State {
 
    
@Override
    
public
void
shenPi(Work w) {
        
System.out.println(
"已经过部门经理审批,审批结束!"
);
    
}
 
}

工作类,拥有一个State的对象,在shenPi方法中将自己回传给State:

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package
com.cmc;
 
public
class
Work {
    
private
State current;
    
private
int
day;
    
private
boolean
isManagermentAccept;
    
public
Work() {
        
current =
new
ProjectManager();
    
}
    
public
State getCurrent() {
        
return
current;
    
}
    
public
void
setCurrent(State current) {
        
this
.current = current;
    
}
    
public
int
getDay() {
        
return
day;
    
}
    
public
void
setDay(
int
day) {
        
this
.day = day;
    
}
    
public
boolean
isManagermentAccept() {
        
return
isManagermentAccept;
    
}
    
public
void
setManagermentAccept(
boolean
isManagermentAccept) {
        
this
.isManagermentAccept = isManagermentAccept;
    
}
    
public
void
shenPi(){
        
current.shenPi(
this
);
    
}
}

客户端测试一下:

 

1
2
3
4
5
6
7
8
9
10
package
com.cmc;
 
public
class
Client {
    
public
static
void
main(String [] args){
        
Work w =
new
Work();
        
w.setDay(
4
);
        
w.setManagermentAccept(
true
);
        
w.shenPi();
    
}
}

转载地址:http://bsuwl.baihongyu.com/

你可能感兴趣的文章
委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件
查看>>
国债期货下跌意味着什么
查看>>
抽象类的应用——汽车租赁系统
查看>>
Voilin 与 乐谱
查看>>
一键U盘装系统
查看>>
最新版SDWebImage的使用
查看>>
C 二维数组与指针
查看>>
node c++ addon注意事项
查看>>
hdu 3501(欧拉函数引申)
查看>>
django-request获取数据
查看>>
python的eval、exec函数使用总结
查看>>
js解析与序列化json数据(一)
查看>>
Oracle升级前备份和失败回退
查看>>
java设计模式-工厂方法模式
查看>>
SAP RFC通信模式
查看>>
基于jQuery+JSON的省市联动效果
查看>>
NABCD构建APP
查看>>
[数据结构]二叉树创建与遍历
查看>>
MySQL 5.6.26几种安装包的区别
查看>>
前端005/React生命周期
查看>>