状态机在C#上位机中使用总结

本以为状态机是很高深的知识,没想到在平时项目中早就用到了。虽然只是最简单的使用,但逻辑是相同的,于是就学习了一下状态模式的写法,方便以后在复杂的项目中使用。
​基本概念

  1. 状态(State)​​:系统在特定时刻所处的状况或模式
    例如上位机的"停止"、"运行"、"暂停"、"紧急停止"等状态
  2. ​事件(Event)​​:触发状态转换的输入或动作
    例如"启动按钮按下"、"停止信号接收"、"急停触发"等
  3. ​转移(Transition)​​:从一个状态到另一个状态的变化
    通常由事件触发,可能伴随特定条件
  4. ​动作(Action)​​:状态转换时执行的操作
    例如"进入运行状态时启动电机"、"进入急停状态时切断电源"

只要符合这四个概念就是状态机,最简单的就是权限管理的功能了,软件上有不同的账户,然后不同的账户有不同的权限功能(状态)。不同的权限对应的能执行的操作不同,比如管理员可以修改参数,操作员不可以(动作)。账户登录界面可以切换不同的账户登录(事件)。只有输入正确的密码才可以登录不同的账户(转移)。这个状态机完全可以使用if-else语句来进行判断实现,建立一个枚举来存储不同的账户类型,然后一个变量存储着当前的账户状态,登录时进行密码和账户名判断,如果正确切换不同的账户。如果是简单的状态机完全可以使用这种方法的,只有3-5个简单状态、状态转换逻辑非常直接、没有复杂的嵌套子状态。这个方法就是对应这类项目最好的解决方案。

除此之外的一些实现方式

实现方式 优点 缺点 适用场景
条件语句(if-else) 简单直观 状态多时代码臃肿难维护 简单状态机(3-5个状态)
状态模式 符合开闭原则,易于扩展 需要创建多个状态类 复杂状态机,需要长期维护
状态表驱动 数据驱动,修改灵活 初期设计复杂 状态转换规则频繁变化
专用框架 功能强大,支持复杂特性 学习成本高 企业级复杂系统

状态模式
//接口
interface 状态接口
要实现的操作1、2、3

//具体的状态
class 状态1:状态接口
操作实现
class 状态2:状态接口
操作实现...

//调度类、上下文类
class 控制
接口实例
当前状态
切换状态1
切换状态2...

状态模式的出现也是为了解耦,更容易添加新状态,在状态大于五个并且出现层次嵌套的时候可以使用状态模式来实现。
无论如何要遵循的设计模式其实只有一个,一切应尽可能简单,但不过分简单。没有复杂度就不要复杂解,不要为了设计模式而去设计模式,代码只需要易懂、易改、安全就可以了

posted @ 2025-06-16 18:41  悲伤的攻城狮  阅读(123)  评论(0)    收藏  举报