生活随笔
收集整理的這篇文章主要介紹了
《研磨设计模式》chap18 状态模式state(4)例子
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
public class StateMachine {//持有一個(gè)狀態(tài)對(duì)象 private State state = null
;//包含流程處理需要的業(yè)務(wù)數(shù)據(jù)對(duì)象,不知道具體類型,用Object,反正只是傳遞到具體的狀態(tài)對(duì)象里面 private Object businessVO = null
;//執(zhí)行工作,客戶端處理流程的接口方法。 public void doWork(){//轉(zhuǎn)調(diào)相應(yīng)的狀態(tài)對(duì)象真正完成功能處理this.state.
doWork(this
);}public State getState() {return state
;}public void setState(State state) {this.state = state
;}public Object getBusinessVO() {return businessVO
;}public void setBusinessVO(Object businessVO) {this.businessVO = businessVO
;}
}public class LeaveRequestContext extends StateMachine{//這里可以擴(kuò)展跟自己流程相關(guān)的處理
}public interface State {//執(zhí)行狀態(tài)對(duì)應(yīng)的功能處理 public void
doWork(StateMachine ctx
);
}public interface LeaveRequestState extends State{//這里可以擴(kuò)展跟自己流程相關(guān)的處理
}public class DepManagerState implements LeaveRequestState{public void doWork(StateMachine request) {//先把業(yè)務(wù)對(duì)象造型回來(lái)LeaveRequestModel lrm =
(LeaveRequestModel
)request.
getBusinessVO();//業(yè)務(wù)處理,把審核結(jié)果保存到數(shù)據(jù)庫(kù)中//部門經(jīng)理審核過后,直接轉(zhuǎn)向?qū)徍私Y(jié)束狀態(tài)了request.
setState(new
AuditOverState());//給申請(qǐng)人增加一個(gè)工作,讓他察看審核結(jié)果
}
}public class ProjectManagerState implements LeaveRequestState{public void doWork(StateMachine request) {//先把業(yè)務(wù)對(duì)象造型回來(lái)LeaveRequestModel lrm =
(LeaveRequestModel
)request.
getBusinessVO();System.out.
println("項(xiàng)目經(jīng)理審核中,請(qǐng)稍候......");//模擬用戶處理界面,通過控制臺(tái)來(lái)讀取數(shù)據(jù)System.out.
println(lrm.
getUser()+
"申請(qǐng)從"+lrm.
getBeginDate()+
"開始請(qǐng)假"+lrm.
getLeaveDays()+
"天,請(qǐng)項(xiàng)目經(jīng)理審核(1為同意,2為不同意):");//讀取從控制臺(tái)輸入的數(shù)據(jù)Scanner scanner = new
Scanner(System.in
);if(scanner.hasNext()){int a = scanner.
nextInt();//設(shè)置回到上下文中String result =
"不同意";if(a==1){result =
"同意";}lrm.
setResult("項(xiàng)目經(jīng)理審核結(jié)果:"+result
);//根據(jù)選擇的結(jié)果和條件來(lái)設(shè)置下一步if(a==1){if(lrm.getLeaveDays() > 3){//如果請(qǐng)假天數(shù)大于3天,而且項(xiàng)目經(jīng)理同意了,就提交給部門經(jīng)理request.
setState(new
DepManagerState());//繼續(xù)執(zhí)行下一步工作request.
doWork();}else{//3天以內(nèi)的請(qǐng)假,由項(xiàng)目經(jīng)理做主,就不用提交給部門經(jīng)理了,轉(zhuǎn)向?qū)徍私Y(jié)束狀態(tài)request.
setState(new
AuditOverState());//繼續(xù)執(zhí)行下一步工作request.
doWork();} }else{//項(xiàng)目經(jīng)理要是不同意的話,也就不用提交給部門經(jīng)理了,轉(zhuǎn)向?qū)徍私Y(jié)束狀態(tài)request.
setState(new
AuditOverState());//繼續(xù)執(zhí)行下一步工作request.
doWork();} } }
}
總結(jié)
以上是生活随笔為你收集整理的《研磨设计模式》chap18 状态模式state(4)例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。