状态机的原理简析及重要用途

简介: 状态机的原理简析及重要用途

如果说业务是如一个人的躯体,那么状态机就如同一个人的灵魂。若一个灵魂不清楚的人,做什么事情也会糊里糊涂,若他脑子清楚明白,做什么事情都能一步到位。

应用的状态机可以简单概述为:应用从一个无用的不稳定状态,不断迁移,一致迁移到一个有用的问题状态。一个应用可以有很多状态机,不同状态机之间可以关联也可以无关联。

作为一个码农按俺的抽象能力确实不咋的,难道和我出身农家有关,所以我总把复杂和抽象的问题简单化,具体化,大白话,恐怕别人听不懂。今天我就把另一种技术也大白话吧!

一个应用的只所以能够串起来,动起来就要有一个灵魂,就是怎么实现具体的业务逻辑,实现的最佳方法就是状态机。

一个应用从发起到结束有一个完整的生命周期,它在整个生命中大部分时间处于某个稳定的状态并且有用状态的咱们称它为稳态,在进入问稳态前他肯定要经历各个不稳定状态。状态机就是标记从不稳定状态不断迁移,最后进入问题状态的全局变量。当然稳定状态是相互,他也会从稳定状态迁移到不稳定状态,最后再迁移到这个稳定状态。如:应用刚开始启动时处于登陆初试化状态(当有登陆失败时进入登陆失败状态,这个状态可以没有),当登陆成功时处于登陆成功状态(稳定状态),这时你就可以进行各种操作了。当你玩腻了想换个帐户了,就退出吧,那么你就进入未登陆状态(由于你在这个状态通常不能做核心的事情,所以可以不称它为稳定状态),当你再次登陆成功,你就又进入登陆成功状态。当你的退出应用了,那就不用记录了吧。这个是最简单的登陆状态机。类似的如接单业务的订单状态机。有的应用要根据当时处于某些页面,当关闭应用再打开应用时,要进入上次的页面。这最适合用状态机实现了。实际上很多人在用各种复杂的方式实现状态机,没有用最简单直接的方式实现。

状态机最简单直白的描述是用一个枚举类型的全局变量记录应用所处不同的状态,根据这个全局变量进入不同的页面或处理不同的逻辑。一个应用可以有不同状态机(不同的枚举类型的全局变量),枚举类型的全局变量可以记录到文件中或数据库中(如:对象存储 core dat中或文件沙盒,MFC的对象持续化是存于数据库中),下次登陆可以读取这个枚举类型的全局变量并且跳到不同的页面和流程。

我做的一个APP的网络触发式自动登录状态机枚举类型:

typedef NS_ENUM(NSInteger,LOGIN_STATE) {
    LOGIN_STATE_INIT = 0,
    LOGIN_STATE_LOGIN_SUCESS,
    LOGIN_STATE_LOGINING,
    LOGIN_STATE_UNAUTO_LOGIN,
    LOGIN_STATE_UNNET_LOGIN,
    LOGIN_STATE_EXIT_LOGIN
};

我做的一个APP的网络触发式自动登录状态机逻辑图:

目录
相关文章
|
6月前
|
C语言 C++ 开发者
深入探索C++:特性、代码实践及流程图解析
深入探索C++:特性、代码实践及流程图解析
|
6月前
解释一下ConditionVariable的工作原理。
解释一下ConditionVariable的工作原理。
97 6
|
6月前
|
Java
Java线程通信的精髓:解析通知等待机制的工作原理
Java线程通信的精髓:解析通知等待机制的工作原理
67 3
Java线程通信的精髓:解析通知等待机制的工作原理
|
移动开发 算法 Java
不同编程语言复现ELO匹配机制与机制原理理解
不同编程语言复现ELO匹配机制与机制原理理解
233 0
|
传感器 算法 安全
状态机设计举例
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
179 0
状态机设计举例
|
存储 算法 异构计算
状态机的概念与设计
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
285 0
状态机的概念与设计
|
算法 网络协议 Java
状态机是干什么的?底层原理是什么?
状态机是干什么的?底层原理是什么?
656 0
|
安全 程序员 Go
包的引出和使用原理|学习笔记
快速学习包的引出和使用原理
包的引出和使用原理|学习笔记
|
异构计算
用有限状态机去理解这个逻辑过程
用有限状态机去理解这个逻辑过程
89 0
用有限状态机去理解这个逻辑过程
|
设计模式 缓存
U3D客户端框架之商业项目中的 FSM 有限状态机 实现代码
FSM有限状态机在游戏中的作用主要是做场景的流程管理,进入场景状态后 加载资源初始化,更新状态时执行更新逻辑,离开场景状态时销毁场景资源,数据清理、角色动作状态切换,进入时播放动作,离开时播放下一个当作等。