第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何處理多條件訂單狀態(tài)的變化方式?我遇到一點(diǎn)問(wèn)題

如何處理多條件訂單狀態(tài)的變化方式?我遇到一點(diǎn)問(wèn)題

問(wèn)題如下:在一個(gè)點(diǎn)餐系統(tǒng)中,有著外賣(mài)單,堂食單等。對(duì)應(yīng)不同的訂單與不同的動(dòng)作和設(shè)置會(huì)有不同的狀態(tài)變化,在代碼中ifelseif要寫(xiě)30-40多行,對(duì)于這種情況是否有更好的處理方法?舉例如下:判斷項(xiàng):商家開(kāi)啟先食后付是否自動(dòng)接單是否有打印機(jī)打印是否成功是否自動(dòng)清臺(tái)動(dòng)作:下單接單拒單顧客取消單顧客支付清臺(tái)結(jié)賬狀態(tài):待確認(rèn)待處理拒絕完成取消進(jìn)行中超時(shí)申請(qǐng)退款如上由5種判斷項(xiàng)組合出多種變化在每種變化中不同的動(dòng)作改變訂單不同的狀態(tài),像這種狀態(tài)模型,除了無(wú)數(shù)的ifelseif是否有更好的方法實(shí)現(xiàn)?想要實(shí)現(xiàn):輸入動(dòng)作輸出狀態(tài)想要一個(gè)思路,非常感謝!
查看完整描述

2 回答

?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊

給一個(gè)大概思路吧。java實(shí)現(xiàn)??梢陨晕⒖枷隆?pre>
packagecom.ui;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.HashMap;
importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Set;
publicclassOrderStatusService{
/**
*映射關(guān)系列表
*/
publicstaticListmapperList=newArrayList();
static{
/**
*初始化判斷項(xiàng)、訂單動(dòng)作到狀態(tài)的映射,這里只為演示,實(shí)際中映射關(guān)系最好保存在配置文件中或者數(shù)據(jù)庫(kù)中,一般在應(yīng)用啟動(dòng)的時(shí)候,從配置文件或者數(shù)據(jù)庫(kù)加載,保存一份即可。
*
*/
OrderStatusMapperm1=newOrderStatusMapper();
m1.addJudgementItems(1,2,4,6)//先吃后付and自動(dòng)接單and有打印機(jī)and打印成功
.addAction2statusItem(1,6)//下單動(dòng)作:進(jìn)行中
.addAction2statusItem(7,4);//結(jié)賬動(dòng)作:已完成
OrderStatusMapperm2=newOrderStatusMapper();
m2.addJudgementItems(3,5)
.addAction2statusItem(2,1)
.addAction2statusItem(4,3);
mapperList.add(m1);
mapperList.add(m2);
}
/**
*是否是相等的set
*@paramsource
*@paramdest
*@return
*/
publicbooleanisEqualSet(Setsource,Setdest){
if(null==source||null==dest){
returnfalse;
}
if(source.size()!=dest.size()){
returnfalse;
}
for(Iteratorit=source.iterator();it.hasNext();){
if(!dest.contains(it.next())){
returnfalse;
}
}
returntrue;
}
publicstaticvoidmain(String[]args){
Orderorder=newOrder();
order.setOrderAction(1);//下單
order.setJudgementItems(newHashSet(Arrays.asList(1,2,4,6)));//先吃后付and自動(dòng)接單and有打印機(jī)and打印成功
//獲取訂單下一個(gè)狀態(tài)
System.out.println(newOrderStatusService().getNextOrderStatus(order));//結(jié)果為6(進(jìn)行中)
}
/**
*獲取下一個(gè)訂單狀態(tài)
*@paramcurOrder
*@return
*/
publicIntegergetNextOrderStatus(OrdercurOrder){
for(OrderStatusMappermapper:mapperList){
if(isEqualSet(curOrder.getJudgementItems(),mapper.getJudgementItems())&&null!=curOrder.getOrderAction()){
returnmapper.getAction2statusMap().get(curOrder.getOrderAction());
}
}
returnnull;
}
}
/**
*訂單類型,訂單動(dòng)作到狀態(tài)的映射。
*
*/
classOrderStatusMapper{
/**
*判斷項(xiàng)
*/
privateSetjudgementItems=newHashSet();
/**
*訂單動(dòng)作到狀態(tài)關(guān)系
*/
privateMapaction2statusMap=newHashMap();
/**
*下一個(gè)訂單狀態(tài)
*/
privateIntegernextStatus;
publicSetgetJudgementItems(){
returnjudgementItems;
}
publicOrderStatusMapperaddJudgementItems(Integer...items){
if(null==items||items.length<=0){
returnthis;
}
for(Integercur:items){
this.judgementItems.add(cur);
}
returnthis;
}
publicMapgetAction2statusMap(){
returnaction2statusMap;
}
publicOrderStatusMapperaddAction2statusItem(Integeraction,Integerstatus){
if(null==action||null==status){
returnthis;
}
this.action2statusMap.put(action,status);
returnthis;
}
publicIntegergetNextStatus(){
returnnextStatus;
}
publicOrderStatusMappersetNextStatus(IntegernextStatus){
this.nextStatus=nextStatus;
returnthis;
}
}
classOrder{
/**
*判斷項(xiàng)目
*1:商家開(kāi)啟先食后付;
*2:自動(dòng)接單;
*3:不自動(dòng)接單
*4:有打印機(jī)
*5:沒(méi)有打印機(jī)
*6:打印成功
*7:打印不成功
*8:自動(dòng)清臺(tái)
*9:不自動(dòng)清臺(tái)
*/
privateSetjudgementItems;
/**
*訂單動(dòng)作
*1:下單
*2:接單
*3:拒單
*4:顧客取消單
*5:顧客支付
*6:清臺(tái)
*7:結(jié)賬
*/
privateIntegerorderAction;
/**
*訂單狀態(tài)
*1:待確認(rèn)
*2:待處理
*3:拒絕
*4:完成
*5:取消
*6:進(jìn)行中
*7:超時(shí)
*8:申請(qǐng)退款
*/
privateIntegerorderStatus;
publicSetgetJudgementItems(){
returnjudgementItems;
}
publicvoidsetJudgementItems(SetjudgementItems){
this.judgementItems=judgementItems;
}
publicIntegergetOrderAction(){
returnorderAction;
}
publicvoidsetOrderAction(IntegerorderAction){
this.orderAction=orderAction;
}
publicIntegergetOrderStatus(){
returnorderStatus;
}
publicvoidsetOrderStatus(IntegerorderStatus){
this.orderStatus=orderStatus;
}
}
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-06
?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

試試看位運(yùn)算可不可以,每個(gè)比特位表示一個(gè)條件的狀態(tài).比如當(dāng)前狀態(tài)為:0111某個(gè)動(dòng)作的執(zhí)行條件為:0100即只要第二個(gè)狀態(tài)位為真的時(shí)候執(zhí)行運(yùn)算的時(shí)候就判斷0111&0100==0100就可以判斷這個(gè)動(dòng)作要不要執(zhí)行了這樣每個(gè)動(dòng)作對(duì)應(yīng)一個(gè)if,會(huì)比原來(lái)少一點(diǎn),但是狀態(tài)轉(zhuǎn)換的代碼可能會(huì)多一點(diǎn),這個(gè)就看樓主權(quán)衡了
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-06
  • 2 回答
  • 0 關(guān)注
  • 584 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)