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

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

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

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 20:12:50

状态机的原理简析及重要用途的相关文章

Java Annotation 及几个常用开源项目注解原理简析

PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示例 Override Annotation Java 1 2 3 @Override public void onCreate(Bundle savedInstanceState); Retrofit Annotation Java 1 2 3 @GET("/users/{username}&quo

[转载] Thrift原理简析(JAVA)

转载自http://shift-alt-ctrl.iteye.com/blog/1987416 Apache Thrift是一个跨语言的服务框架,本质上为RPC,同时具有序列化.发序列化机制:当我们开发的service需要开放出去的时候,就会遇到跨语言调用的问题,JAVA语言开发了一个UserService用来提供获取用户信息的服务,如果服务消费端有PHP/Python/C++等,我们不可能为所有的语言都适配出相应的调用方式,有时候我们会很无奈的使用Http来作为访问协议;但是如果服务消费端不能

cgroup原理简析:进程调度

本篇来探究下cgroup对cpu的限制机制,前文提到过cgroup也是通过进程调度子系统来达到限制cpu的目的,因此需要了解下进程调度子系统. 因为是介绍cgroup的文章,因此只介绍进程调度中与cgroup密切关联的部分,详细完成的进程调度实现可参考进程调度的相关资料. 本文分为三个部分,首先介绍进程调度中的调度算法,在该基础上引入组调度,最后结合前面文章(cgroup原理简析:vfs文件系统)来说明上层通过echo pid >> tasks, echo n > cpu.shares等

Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义.解析,并对几个 Android 开源库 Annotation 原理进行简析.PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 完整版原文见:Java Android 注解(Ann

SIFT特征原理简析(HELU版)

SIFT(Scale-Invariant Feature Transform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D. G. Lowe于2004年以<Distinctive Image Features from Scale-Invariant Keypoints[J]>发表于IJCV中.开源算法库OpenCV中进行了实现.扩展和使用. 本文主要依据原始论文和网络上相关专业分析,对SIFT特征提取的算法流程进行简单分析.由于涉及到的知识概念较多,本人

ARP攻击原理简析及防御措施

0x1  简介 网络欺骗攻击作为一种非常专业化的攻击手段,给网络安全管理者,带来严峻的考验.网络安全的战场已经从互联网蔓延到用户内部的网络, 特别是局域网.目前利用ARP欺骗的木马病毒在局域网中广泛传播,导致网络随机掉线甚至整体瘫痪,通讯被窃听,信息被篡改等严重后果. 0x2  ARP协议概述 ARP协议(address resolution protocol)地址解析协议 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址,所以用ARP解析协议将

iOS Block原理简析

Block的语法 Block是iOS闭包的实现方式,能够获取局部变量的匿名函数. Block的OC声明 返回值类型 (^Block变量名字)(参数列表) = (参数列表){}; 例子 int (^add)(int a,int b) = ^(int a, int b) { return a + b; }; int sum = add(1,4); NSLog(@"sum = %d",sum); NSString* (^getFullName)(NSString *first,NSStrin

Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

本文由嵌入式企鹅圈原创团队成员.阿里资深工程师Hao分享. 上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android的一些核心技术,现在就来介绍下它的一些原理. 本篇先介绍dexposed方案:https://github.com/alibaba/dexposed,它是手机淘宝团队使用的热补丁方案,后来开源到github上,取的名字dexposed表明了自己是基于

【超精简JS模版库/前端模板库】原理简析 和 XSS防范

使用jsp.php.asp或者后来的struts等等的朋友,不一定知道什么是模版,但一定很清楚这样的开发方式: <div class="m-carousel"> <div class="m-carousel-wrap" id="bannerContainer"> </div> </div> <ul class="catelist onepx" onepxset="