Open mhfe123 opened 4 years ago
高科技, 写得很棒 👏 👏 👏 这个还挺实用的: 我们在做列表请求: loading(pending), success (resolve) , error(reject) 也可以定义这仨状态机 ; 还有权限控制---可读可写可执行 ,可以定义一些字节码 做状态计算 以及一些中间转态
高科技, 写得很棒
这个还挺实用的: 我们在做列表请求: loading(pending), success (resolve) , error(reject) 也可以定义这仨状态机 ; 还有权限控制---可读可写可执行 ,可以定义一些字节码 做状态计算 以及一些中间转态
这个应用很广泛的,只不过以前我们没关注过而已
什么是状态机(FSM)?
字面上讲它是用来管理状态的,状态数量是有限的,并且可以自动执行,即给定一个当前状态与输入,可以明确得到输出状态,当然他不是一个机器,而是一个数学模型。
它有四个概念:
其他的理解: 状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
状态机能用来做什么
正则表达式引擎
正则表达是引擎是一个典型的状态机的栗子,它分为非确定有限状态自动机
NFA(Nondeterministic Finite Automaton)
与确定有限状态自动机DFA(Deterministic Finite Automaton)
两种,都通通过状态机的概念来实现的。简单实现一个关于
ab|bc
的正则匹配:KMP算法(Knuth–Morris–Pratt algorithm)
以字符串"BBC ABCDAB ABCDABCDABDE"与搜索词"ABCDABD"进行举例
移动位数 = 已匹配的字符数 - 对应的部分匹配值
Promise
手撸一个Promise的实现:
HTTP协议
简单封装一个http请求的响应解析器:
HTML解析
在html标准里边,html的词法描述就是按照状态机的概念来进行描述的,详细;
设计模式--状态模式
设计模式中有个状态模式,还有一个策略模式,两者有点相似,又有些不同,它们的相同点是,都有一个上下文、一些策略类或者状态类,上下文把请求委托给这些类来执行。它们之间的区别是策略模式中的各个策略类之间是平等又平行的,它们之间没有任何关系,所以客户必须熟知这些策略类的作用,以便客户自己可以随时主动切换算法。但是在状态模式中,状态和状态对应的行为早已被封装好,状态之间的切换也早就被规定,“改变行为”这件事发生在状态模式的内部,对于客户来说,不需要了解这些细节。
讲的多都不如直接看代码,那么我们通过栗子来理解一下状态模式的应用:
一个比较常见的场景栗子电灯只有一个开关,但是它的表现是:第一次按下打开弱光,第二次按下打开强光,第三次才是关闭电灯。
未使用状态模式:
使用状态模式的代码:
此外,状态机的概念还用于语言的词法分析,语法分析,网络协议,游戏设计,客服机器人等各个方面,是我们编程中一个很重要的概念
推荐工具:
参考链接: