状态机的原理简析及重要用途
来源:互联网 发布:sms水动力学软件 编辑:程序博客网 时间:2024/06/07 21:05
如果说业务是如一个人的躯体,那么状态机就如同一个人的灵魂。若一个灵魂不清楚的人,做什么事情也会糊里糊涂,若他脑子清楚明白,做什么事情都能一步到位。
应用的状态机可以简单概述为:应用从一个无用的不稳定状态,不断迁移,一致迁移到一个有用的问题状态。一个应用可以有很多状态机,不同状态机之间可以关联也可以无关联。
作为一个码农按俺的抽象能力确实不咋的,难道和我出身农家有关,所以我总把复杂和抽象的问题简单化,具体化,大白话,恐怕别人听不懂。今天我就把另一种技术也大白话吧!
一个应用的只所以能够串起来,动起来就要有一个灵魂,就是怎么实现具体的业务逻辑,实现的最佳方法就是状态机。
一个应用从发起到结束有一个完整的生命周期,它在整个生命中大部分时间处于某个稳定的状态并且有用状态的咱们称它为稳态,在进入问稳态前他肯定要经历各个不稳定状态。状态机就是标记从不稳定状态不断迁移,最后进入问题状态的全局变量。当然稳定状态是相互,他也会从稳定状态迁移到不稳定状态,最后再迁移到这个稳定状态。如:应用刚开始启动时处于登陆初试化状态(当有登陆失败时进入登陆失败状态,这个状态可以没有),当登陆成功时处于登陆成功状态(稳定状态),这时你就可以进行各种操作了。当你玩腻了想换个帐户了,就退出吧,那么你就进入未登陆状态(由于你在这个状态通常不能做核心的事情,所以可以不称它为稳定状态),当你再次登陆成功,你就又进入登陆成功状态。当你的退出应用了,那就不用记录了吧。这个是最简单的登陆状态机。类似的如接单业务的订单状态机。有的应用要根据当时处于某些页面,当关闭应用再打开应用时,要进入上次的页面。这最适合用状态机实现了。实际上很多人在用各种复杂的方式实现状态机,没有用最简单直接的方式实现。
状态机最简单直白的描述是用一个枚举类型的全局变量记录应用所处不同的状态,根据这个全局变量进入不同的页面或处理不同的逻辑。一个应用可以有不同状态机(不同的枚举类型的全局变量),枚举类型的全局变量可以记录到文件中或数据库中(如:对象存储 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的网络触发式自动登录状态机逻辑图:
- 状态机的原理简析及重要用途
- extern "C"的用途及原理
- extern "C"的用途及原理
- 继电器的分类、原理及用途
- Dictionary字典的用法及用途原理
- 指针的一个重要用途
- TCP 状态机 理解TCP重要的环节
- vtkDelaunay3D用法、用途及原理
- 科普:手机的各种传感器原理及用途
- 状态机的原理和实现
- 【cocos2dx】状态机应用场景及原理
- android中状态机原理之状态机的两种写法
- Global.asax 的用途原理
- 索引的原理和用途
- 虚拟光驱的特点及用途
- TRACE的用途及用法
- EJB的种类及用途
- 的用途及实际应用
- C#中的多态
- luasql-master的修改,支持调用存储过程
- http 原生post 请求
- 类和对象
- 在 Activity 之间传递参数————传递值对象
- 状态机的原理简析及重要用途
- 百度地图获取当前位置坐标,并计算距离
- C#中sealed关键字
- 数据结构基础笔记(一)【严蔚敏】
- noip2003 栈 (卡特兰数)
- shell programing
- iOS导出p12文件
- Hadoop分布式文件系统
- Android Studio基本配置