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

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

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

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

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

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

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

状态机最简单直白的描述是用一个枚举类型的全局变量记录应用所处不同的状态,根据这个全局变量进入不同的页面或处理不同的逻辑。一个应用可以有不同状态机(不同的枚举类型的全局变量),枚举类型的全局变量可以记录到文件中或数据库中(如:对象存储 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的网络触发式自动登录状态机逻辑图:

目录
相关文章
|
7月前
|
Java
Java线程通信的精髓:解析通知等待机制的工作原理
Java线程通信的精髓:解析通知等待机制的工作原理
86 3
Java线程通信的精髓:解析通知等待机制的工作原理
|
7月前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
存储 Java
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 中
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 中
292 0
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂   中
|
编解码 缓存 NoSQL
7点 讲明白地图切片的概念与原理
7点 讲明白地图切片的概念与原理
513 0
|
传感器 算法 安全
状态机设计举例
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
186 0
状态机设计举例
|
存储 算法 异构计算
状态机的概念与设计
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
306 0
状态机的概念与设计
|
算法 网络协议 Java
状态机是干什么的?底层原理是什么?
状态机是干什么的?底层原理是什么?
687 0
|
Java
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 下
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 下
146 0
|
Java 编译器
一张图搞清楚Java异常机制
下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。
124 0
一张图搞清楚Java异常机制
|
架构师 开发者 iOS开发
探究ReactiveCocoa 底层KVO封装流程
一、对比原生KVO,初识ReactiveCocoa的KVO * 我们先来看一段代码,通过触屏来动态修改视图背景色 @interface ViewController () @property (nonatomic, strong)UIColor * bgColor; @end @implemen...
3125 0