再次领悟设计模式-职责链
来源:互联网 发布:安徽芜湖java 编辑:程序博客网 时间:2024/06/13 18:39
前言:今天在进行操作的时候,出现了很多的判断,这样打的逻辑判断还是建的次数很好的,要想抽出来做另一些操作很难,因此就需要把这些判断抽出来做成类来调用,职责链就来救场。
首先我们需要了解什么是链:一系列节点的集合,每个节点都可以灵活的拆解、重组,在灵活的组合下,我们需要做什么样的判断,只需要调用即可,避免了大量的if判断。
职责链模式应用之审批管理:
发审批这件事,我们每一个人都不陌生,即时通讯的方法很快处理我们的请求,极大的方便我们的处事效率。在TGB如果你请求的时间小于2小时,那么只需向纪委发个审批,及时通知纪委就能准假。但是如果超过2小时,就需要向BOSS请求处理,当然这是需要一定的条件。时间更长的话就需要做好休息一星期的准备,因为老总的处理可是有代价的。
/****************验证start****************/ /// <summary> /// 点击提交,运用职责链思想,进行验证,从而进行订单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { //遍历检查GridView1是否有选择 int k = 0; for (int i = 0; i < GridView1.Rows.Count; i++) { CheckBox chk = (CheckBox)(GridView1.Rows[i].FindControl("ckbSelect")); if (chk.Checked == true) { k = k+1; break; } } //如果 GridView1有选择任何一项,则执行此项 if (k > 0) { //如果大于零,进入“所选日期与菜单是否匹配”方法 <span style="color:#ff0000;"> checkTime();</span> } else { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('您未选择任何菜');</script>"); } //逻辑 } /// <summary> /// 所选日期与菜单不匹配-十二期杨晓风、赵尽朝-2016-8-14 09:35:16 /// </summary> public void <span style="color:#ff0000;">checkTime()</span> { string maketime = ""; maketime = Quantum(maketime); quantum = Session["quantum"].ToString(); ButtonClickTime = Session["ButtonClickTime"].ToString(); if (ButtonClickTime != menusTime.Value | maketime != quantum) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript'defer>alert('所选日期与菜单不匹配,请点击‘刷新菜单’');</script>>"); } else { //如果所选日期与菜单匹配,则进入此方法,判断当天是否提交过订单 <span style="color:#ff0000;">checkByond();</span> } } /////////////////////////////////////////////////////////////////////////// /// <summary> /// 若当天提交过订单则不允许再次提交订单 /// </summary> public void checkByond() { string dateOfToday; //int hourOfToday; dateOfToday = DateTime.Now.Date.ToString("yyyy-MM-dd"); // hourOfToday = DateTime.Now; //若当天提交过订单则不允许再次提交订单 OrderSheet ordersheet = new OrderSheet(); SelectFood foodbll = new SelectFood(); bool flag; if (Lunch.Checked == true) { ordersheet.eatTimeQuantum = "中午"; } if (Dinner.Checked == true) { ordersheet.eatTimeQuantum = "晚上"; } ordersheet.OrderDate = menusTime.Value; ordersheet.CardNo = Session["Admin"].ToString(); flag = foodbll.isHaveOrder(ordersheet); if (flag == true) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript'defer> Dialog.confirm('您今天已经提交过订单,你确定要重复提交订单么?', function () {document.getElementById('ReSubmit').click();});</script>>"); } else { //如果当天没有提交过订单,则进入“每天订餐时间点的限制”的方法 <span style="color:#ff0000;">checkBeyondHour()</span>; } } protected void ReSubmit_Click(object sender, EventArgs e) { checkBeyondHour(); } /////////////////////////////////////////////////////////////////////////// /// <summary>f /// 如果条件为今天十点半以后则提醒,可以提交明天或以后订单 /// </summary> public void checkBeyondHour() { string dateOfToday; //int hourOfToday; dateOfToday = DateTime.Now.Date.ToString("yyyy-MM-dd"); //十点半后不能提交当天的订单,只能浏览菜单,可以提交今天以后的菜单---焦玉丽---2016年7月24日11:53:19 //如果条件为今天十点半以后则提醒,可以提交明天或以后订单 int hourOfToday = Convert.ToDateTime(limitOrder).CompareTo(DateTime.Now); if (menusTime.Value == dateOfToday && hourOfToday < 0) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript'defer>alert('请在" + limitOrder + "之前订餐!现在您可以预订本周剩余几天的饭菜。');</script>>"); } else { //如果没有超过订餐时间点的限制,则进入选择菜的方法 <span style="color:#ff0000;">checkNumPrince()</span>; } } //////////////////////////////////////////////////////////////////////////// /// <summary> /// 如果某一行的CheckBox被选中,则执行统计操作 /// </summary> public void checkNumPrince() { T_OrderDetailSheet detailinfo = new T_OrderDetailSheet(); SelectFood selectfood = new SelectFood(); OrderSheet orderinfo = new OrderSheet(); //订单ID orderinfo.OrderId = DateTime.Now.ToString("MMddHHmmssffff"); //就餐时间段 orderinfo.OrderDate = menusTime.Value; //卡号 //TODO:假数据2 orderinfo.CardNo = Session["Admin"].ToString(); // orderinfo.CardNo = "E000196"; List<T_OrderDetailSheet> list = new List<T_OrderDetailSheet>(); DataTable dt = new DataTable(); //提交 decimal numScore = 0; for (int i = 0; i < GridView1.Rows.Count; i++) { //如果某一行的CheckBox被选中,则执行统计操作 CheckBox chk = (CheckBox)(GridView1.Rows[i].FindControl("ckbSelect")); if (chk.Checked == true) { decimal yg = Convert.ToDecimal(GridView1.Rows[i].Cells[3].Text) * Convert.ToDecimal(GridView1.Rows[i].Cells[4].Text.Trim()); //string a = GridView1.Rows[i].Cells[3].Text; //string b = GridView1.Rows[i].Cells[4].Text; //获取单个事物ID,和数量 detailinfo.FoodId = GridView1.Rows[i].Cells[1].Text; detailinfo.Num = GridView1.Rows[i].Cells[4].Text; detailinfo.OrderId = orderinfo.OrderId; selectfood.InsertOrderDetail(detailinfo); numScore = numScore + yg; } } //如果 选择任何菜,则进入此方法 <span style="color:#ff0000;">checkNumT(numScore, orderinfo, selectfood);</span> } //////////////////////////////////////////////////////////////////////////////// /// <summary> /// 如果所选择的食物不在今天的菜单列中则报错 /// </summary> /// <param name="numScore"></param> /// <param name="orderinfo"></param> /// <param name="selectfood"></param> public void checkNumT(decimal numScore, OrderSheet orderinfo, SelectFood selectfood) { if (numScore != 0) { ////如果所选择的食物不在今天的菜单列中则报错 RadioButton radio = new RadioButton(); //T代表下午在这吃,F代表下午不在这吃 if (Yes.Checked == true) { orderinfo.IsDinnerEat = "T"; } if (No.Checked == true) { orderinfo.IsDinnerEat = "F"; } if (No.Checked != true && Yes.Checked != true) { orderinfo.IsDinnerEat = "F"; } <span style="color:#ff0000;">checkEatPlace(numScore, orderinfo, selectfood);</span> } } ////////////////////////////////////////////////////////////////////// /// <summary> /// 晚上是否在餐厅吃饭 /// </summary> /// <param name="numScore"></param> /// <param name="orderinfo"></param> /// <param name="selectfood"></param> public void checkEatPlace(decimal numScore, OrderSheet orderinfo, SelectFood selectfood) { //晚上是否在餐厅吃饭 if (Lunch.Checked == true) { // orderinfo.IsDinnerEat = "F"; orderinfo.eatTimeQuantum = "中午"; } if (Dinner.Checked == true) { orderinfo.IsDinnerEat = "NULL"; orderinfo.eatTimeQuantum = "晚上"; } if (Lunch.Checked != true && Dinner.Checked != true) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请确认订餐时间段(早午餐或晚餐)');</script>"); } else { <span style="color:#ff0000;">checkCash(numScore, orderinfo, selectfood);</span> } } ///////////////////////////////////////////////////////////////////// /// <summary> /// 如果卡余额不足支付本次订单,则提交失败 /// </summary> /// <param name="numScore"></param> /// <param name="orderinfo"></param> /// <param name="selectfood"></param> public void checkCash(decimal numScore, OrderSheet orderinfo, SelectFood selectfood) { //查询卡余额-焦玉丽-2016年7月27日10:42:42 SelectFood myBLL = new SelectFood(); string cardId = Session["Admin"].ToString(); Decimal cash = myBLL.InquireCash(cardId); lblRem.Text = cash.ToString(); //如果卡余额不足支付本次订单,则提交失败 if (cash < numScore) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('订单提交失败! 余额不足,请及时充值');</script>"); } else { <span style="color:#ff0000;"> checkOrder(numScore, orderinfo, cash, selectfood);</span> } } //////////////////////////////////////////////////////////////////// /// <summary> /// 查询历史订单,若累计订单和大于余额值,则不能提交 /// </summary> /// <param name="numScore"></param> /// <param name="orderinfo"></param> /// <param name="cash"></param> /// <param name="selectfood"></param> public void checkOrder(decimal numScore, OrderSheet orderinfo, Decimal cash, SelectFood selectfood) { //查询历史订单,若累计订单和大于余额值,则不能提交--焦玉丽--2016年7月31日09:48:43 DataTable sumcash = new DataTable(); string cardno = Session["Admin"].ToString(); SelectFood bll = new SelectFood(); sumcash = bll.QuerySumCash(cardno); string Cash = sumcash.Rows[0][0].ToString(); decimal sumBalacnce; if (Cash == "") { sumBalacnce = numScore; } else { sumBalacnce = Convert.ToDecimal(Cash) + numScore; } if (cash < sumBalacnce) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('订单提交失败! 余额不足,请及时充值');</script>"); } else { <span style="color:#ff0000;"> submitOrderCore(numScore, orderinfo, cash, selectfood);</span> } } ////////////////////////////////////////////////////////////////// /// <summary> /// 菜单显示当天全部-十二期杨晓风、赵尽朝-2016-8-14 09:52:40 /// </summary> /// <param name="numScore"></param> /// <param name="orderinfo"></param> /// <param name="cash"></param> /// <param name="selectfood"></param> public void submitOrderCore(decimal numScore, OrderSheet orderinfo, Decimal cash, SelectFood selectfood) { //将数据插入到订单总表中 orderinfo.TotalCost = Convert.ToString(numScore); selectfood.InsertOrder(orderinfo); ShowMenu();//显示菜单项 //this.Main.Style.Add("display", "none");////隐藏 Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('订单提交成功! 订单详情参见页尾');</script>"); //初始化界面 //修改人:焦玉丽 //修改时间:2016年7月26日10:47:50 Lunch.Checked = true; No.Checked = true; } #endregion
职责链的灵活性:
1. 改变内部的传递规则。2.可以从职责链任何一关开始。
发审批这件事我们试不陌生的,审批这种能即时通讯的请求方式,极大的方便了我们处理事务的效率。在这里
0 0
- 再次领悟设计模式-职责链
- 职责链设计模式
- 【设计模式】职责链
- 设计模式---职责链
- 职责链设计模式
- 职责链设计模式
- 设计模式---职责链模式
- 设计模式-职责链模式
- 设计模式 职责链模式
- 设计模式- 职责链模式
- 设计模式 - 职责链模式
- 设计模式 - 职责链模式
- 设计模式-职责链模式
- 设计模式--职责链模式
- 设计模式-职责链模式
- 设计模式--职责链模式
- 设计模式-职责链模式
- 【设计模式】职责链模式
- 四种方案解决ScrollView嵌套ListView问题
- print2flash实现将word文档转换成swf,网页直接预览
- 文章标题
- No enclosing instance of type 类名 is accessible. Must qualify the allocation with an enclosing instan
- android 常用图片处理效果总结
- 再次领悟设计模式-职责链
- 机器学习入门 之 概论
- 内部类
- HDU 2504 又见GCD【GCD】
- suse11 安装jdk1.7.0.79
- 次优查找树的原理是什么?
- Python学习之路(一)
- 一些常用的断言方式
- C++Primer第三章(第五版) 课后习题 程序题 源代码