本文主要是介绍C#机房重构-实时查看上机余额(状态模式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
状态模式 |
状态模式:当一个对象的状态发生改变时,允许改变其行为。当控制一个对象状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
具体实现 |
UI层
Entity.Gloable.Time = 1;//在上机操作中赋值,判断其实时查询余额的次数(经过多少个小时)private void txtcardNo_EnabledChanged(object sender, EventArgs e){if (txtcardNo.Enabled == false)//当确定用户已上机,则启动状态模式,实时判断余额情况{//timer3.Enabled = true;//计时器开始运行timer3.Start();//启动计时器 }}private void timer3_Tick(object sender, EventArgs e){//获得该学生的学号Student_info student = new Student_info();Line_info line = new Line_info();student.CardNo = Convert.ToInt32(txtcardNo.Text.Trim());//查询该用户的余额情况Facade.MainFacade facade = new Facade.MainFacade();//实例化外观DataTable table = facade.SelectStudent(student);//传参line.Cash =Convert.ToDouble(table.Rows[0][7].ToString());line.Type = table.Rows[0][13].ToString().Trim();line.Cardno = student.CardNo;line.ConsumeTime =Gloable.Time;//获得不断增加的花费时间//每一个小时查看其余额string a = facade.InquiryState(line);if (a == "null"){return;//跳出}else{MessageBox.Show(a, "提示");if (a== "余额不足5元,正在下机"){button1_Click(sender,e);//调用下机事件timer3.Stop();//终止实时查看余额情况,停止计时器}}
BLL层
public string InquiyState(Entity.Line_info line){//获取基本数据Factory.Factory fact = new Factory.Factory();IDAL.IBasicDate idal = fact.Opbasicdata();DataTable table = idal.Selectdata();//为实体赋值line.Rate = Convert.ToInt32(table.Rows[0][0]);line.tmpRate = Convert.ToInt32(table.Rows[0][1]);#region//策略模式计算花费金额#endregion//获取学生表中的剩余金额Entity.Student_info student = new Student_info();student.CardNo = line.Cardno;IDAL.IStudentIDAL idal2 = fact.Selectstudent();DataTable dt = idal2.Selectstudent(student);//将花剩余金额传给实体 line.Cash = Convert.ToDouble(dt.Rows[0][7].ToString()) - line.Consume;//调用状态模式,判断金额状态StateModel.Context cashstate = new StateModel.Context();cashstate.Consume = line.Cash;//将剩余金额赋给context的对象属性string a=cashstate.WriteProgram();//时间+1Entity.Gloable.Time++;return a;}
State
public abstract class State//抽象状态{public abstract string WriteProgram(Context context);//抽象处理请求的方法}public class Context//维护一个State的实例,并定义了当前的状态{private State current;public Context(){current = new StateOne();//定义一个初始状态}private double consume;//定义一个属性public double Consume{get { return consume; }set { consume = value; }}public void SetState(State s)//改变初始状态{current = s;}public string WriteProgram()//请求的处理{string a = current.WriteProgram(this);return a;}}public class StateOne : State//具体状态{public override string WriteProgram(Context context){string a = "null";if (context.Consume >= 10){a = "null";}else{context.SetState(new StateTwo()); context.WriteProgram();}return a;}}public class StateTwo : State//具体状态{public override string WriteProgram(Context context){string a = "null";if (context.Consume < 10){a = "余额不足10元,请尽快充值,以免影响上机!";}else{context.SetState(new StateThere()); context.WriteProgram();}return a;}}public class StateThere: State//具体状态{public override string WriteProgram(Context context){string a = "null";if (context.Consume < 5){a = "余额不足5元,正在下机";}return a;}}
总结 |
这篇关于C#机房重构-实时查看上机余额(状态模式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!