网站首页 > java教程 正文
今天咱接着读书吧,今天这一章说的是与现实世界共舞。
就是说现实世界纷繁复杂,基于事件来编程可以更好地完成目标。
作者提到了4个实现的策略:有限状态机、观察者模式、发布/订阅、反应式编程和流。
咱今天先聊第一个吧。
有限状态机
一个状态机基本上就是一个如何处理事件的规范。
它由一组状态组成,其中一个是当前状态。
对于每个状态,我们列出对该状态有意义的事件。
对于每一个事件,我们定义系统的新的当前状态。
感觉上有限状态机能用到的地方挺多的。
比如审批流,先是待审批,然后事件包括通过和驳回,如果是通过,就去下一步,如果驳回就重新打开。当然也可以有其他的审批流程,看具体如何定义了。
比如单据的流转,待付款、待付款状态可以接受的事件是取消,和付款;取消后变成已取消,付款后变成待发货……
我上面提到的这些都是比较明确的抽象,有比较明确状态和事件。
作者举了另外一个例子,算是打开了我的思路。
例子是,读取文本中的所有字符串,字符串通过一对双引号"括起来,比如这样"你好,我是莫愆",但是有一种比较特殊的情况是转义字符,比如这样"moqian says:\"hello\"",其中\"是转义字符,它们两个在一起代表了一个字符,而不是代表字符串的开始和结束。
作者用Ruby写了一个例子:
这是规则定义,大括号前的当前状态,=>前的是事件,[]中括号里的是返回值,前面的是新状态,后面的是要进行的操作。
以中间那个in_string为例,in_stirng为当前状态,代表现在真正一个字符串中,它可以接收3个事件,双引号,反斜杠,其他值(默认),如果是双引号,就把状态改为寻找新的字符串,并结束当前字符串;如果是反斜杠,就把状态改为复制下一个字符,并把当前字符写入;如果是其他值,则状态不变,还是保持在字符串中的状态,并把当前字符写入。
image-20221001231526475上面是定义,下面是具体的实现:
image-20221001233449880用java实现的话会稍稍有些不同,毕竟java不能一次性返回两个返回值,把返回值给包装一下就能完成了,而且它这种二维数组的取值方式,java里也不能这么用,真是数组的话,只能传下标,不能传字符串。
领会思想就好了,具体的实现都好说。
有限状态机并不能处理所有事件相关的事情,所以,我们明天接着聊其他的方式。
- 上一篇: 「架构设计」无状态状态机在代码中的实践
- 下一篇: 对于短信平台呼叫状态机的调查
猜你喜欢
- 2024-11-26 Java线程调度&状态
- 2024-11-26 JAVA线程状态及实现
- 2024-11-26 学Java很久了,但越学越“糊涂”,Java学到什么程度才叫精通呢?
- 2024-11-26 设计模式之状态模式
- 2024-11-26 java开发工具IntelliJ IDEA Git使用教程:检查项目状态
- 2024-11-26 java设计模式状态模式
- 2024-11-26 Java线程的6种状态及切换,透彻讲解
- 2024-11-26 计算机等级二考试辅导:Java IO机试题及解答(第2部分)
- 2024-11-26 清华教授,手把手带你深度解读Java枚举,理论与实战齐飞
- 2024-11-26 Java试题分享211111
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)