【C#重构】——上机余额判断应用的 状态模式

2023-12-27 12:20

本文主要是介绍【C#重构】——上机余额判断应用的 状态模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

回顾状态模式:

在这里插入图片描述
根据不断的请求或者实时变化,更改状态
可对状态进行读取并更具判断,设置新的状态
不同的子状态重写抽象类状态,进行实时判断更改。

实战分析:

在上机中,要进行实时地余额判断,并进行余额不足和小于最低余额强制下机的操作
或许实时的余额变化,进行判断余额调整状态。
Sate类

public class StateModel{public abstract class State{public abstract string WriteProgram(Context context);}public class Context{//用到的实体private State current;private double consume;public double Consume { get => consume; set => consume = value; }public State Current { get => current; set => current = value; }public void SetState(State s)//改变初始状态,可读当前状态{Current = s;}public string WriteProgram()//请求的处理,并设置下一个状态{string a = Current.WriteProgram(this);return a;}public class StateOne : State//具体子状态1{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//具体子状态2{public override string WriteProgram(Context context){string a = "null";if (context.Consume < 10){a = "余额不足10元,请尽快充值,以免影响上机!";}else{context.SetState(new StateThree()); context.WriteProgram();}return a;}}public class StateThree : State//具体子状态3{public override string WriteProgram(Context context){string a = "null";if (context.Consume < 5){a = "余额不足5元,正在下机";}return a;}}}

外观层进行传值

//连接状态模式public string InquireyStat(LineInfo outline){StateModel.Context cs = new StateModel.Context();cs.Consume = outline.Cash;string a = cs.WriteProgram();Entity.Gloable.Time++;return a;}

UI层判断

 private void txtOnUserID_EnabledChanged(object sender, EventArgs e){if (txtOnUserID.Enabled == false)//当确定用户已上机,则启动状态模式,实时判断余额情况{timerOut.Enabled = true;//计时器开始运行timerOut.Start();//启动计时器          }}private void timerOut_Tick(object sender, EventArgs e){//student 表 selectEntity.StudentInfo student = new Entity.StudentInfo();student.UserID = Convert.ToInt32(txtOutUserID.Text.Trim());DataTable table1;Facade.OutLineFacade facade = new Facade.OutLineFacade();table1 = facade.SelectStudentFacade(student);//line_info表,插入上下机记录表 insertEntity.LineInfo outline = new Entity.LineInfo();int balance = Convert.ToInt32(table1.Rows[0][2].ToString());//学生表余额outline.Consume_time = Convert.ToString(Gloable.Time);//??//每一小时查看余额string a = facade.InquireyStat(outline);if (a == "null"){return;}else{MessageBox.Show(a, "提示");if (a == "余额不足5元,下机"){//调用下事件btnOutLogin_Click(sender, e);timerOut.Start();}}}

还有不完善的地方,多指正

这篇关于【C#重构】——上机余额判断应用的 状态模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543109

相关文章

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项