状态转移表+State模式
为了给用户提供更好的体验方式,多级联动,多种选择方式,半智能化的容错能力等是我们采用的手段,同时这对软件的开发带来了更多的复杂性。我们需要考虑在各种不同状态下,按钮的功能,以及转换。
在我做过的若干项目中,牵扯这一问题的地方都是非常容易出bug的。界面越简化,越智能,错误率越高。多次尝试使用State模式简化问题,但效果并不明显。
仔细分析一下,发现State模式,解决的就是不同状态下,行为不同的问题。但对于状态的转换和迁移,State模式并没有给出解决办法。这就导致有些时候引入State模式会带来更大的复杂性。例如:有n种可能改变状态的外部事件,m种状态,在State的模式中,状态的转移被定义在Context类中,这就导致在Context类中,需要对每种外部事件,遍历所有状态,决定下一状态。从而在Context类中最多需要了n*m次IF语句。导致了可读性的迅速下降。
另外一种更糟糕的设计是,让State类来处理外部事件,也就是说对事件的响应放到状态类中去,从OO分析的角度来看,这样也无可厚非,对同一外部事件的状态迁移也可以算作行为不同的一种方式。然而,当状态转移行为比较复杂时,整个事情就变成了一种灾难。当状态经过多次转换,每次你都要找到对应的状态类,来查看下一次状态是什么。换句话说,我们必须查看完所有的实际状态类,才能得到一个完整的状态迁移情况。
状态迁移表很好的解决了状态的迁移的问题。整个状态转换一目了然。结合State模式,可以较为完美的解决这一问题。
可惜的是JAVA并不支持函数对象,否则代码可以更加简化了明了。
PS:这种解决办法在Python中经常使用,多学几种语言,扩展一下自己的视野还是很有必要的
转载于:https://blog.51cto.com/element1999/284991
状态转移表+State模式相关推荐
- 为什么只有状态转移算法才是真正意义上的智能优化算法,其它的都是“假冒伪劣”?
0 旁白 长期以来,"论文为王"的观念被推崇至上,没有论文就没有发言权,发表了大量学术论文才能高谈阔论.坐而论道,以至于出现"大家都忙着写论文,没有时间搞科研" ...
- 根据状态转移表实现时序电路
根据状态转移表实现时序电路 某同步时序电路转换表如下,请使用D触发器和必要的逻辑门实现此同步时序电路 电路的接口如下图所示 A表示输入,Y 表示输出 理解状态转移表,画成状态转移图 `timescal ...
- REST(Representational State Transfer表述性状态转移)
http://zh.wikipedia.org/zh-cn/REST REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降 ...
- java state用法_Java状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elsei ...
- 微服务——REST(Representational State Transfer,表述性状态转移)
面试造飞机系列:看架构师如何设计微服务接口 REST(Representational State Transfer,表述性状态转移) 是一种软件架构风格.REST提出了一组架构约束条件和原则,任何满 ...
- 5.8 设计模式之State(状态)—对象行为型模式
5.8 State(状态)-对象行为型模式 参考文章 意图 状态模式是一种行为设计模式, 改变一个对象的内部状态进而改变其行为. 问题及情景 状态模式与有限状态机的概念紧密相关. 其主要思想是程序在任 ...
- C++之状态(State)模式
0. 简介 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样.这其实就有点类似算法中的有限状态机的形式. 其主要思想是程序在任意时刻仅可 ...
- 设计模式--状态(State)模式
模式定义 允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为 类图 要点总结 State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时, ...
- 设计模式学习笔记——状态(State)模式框架
设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...
最新文章
- DataGridView 分页显示
- Eclipse下Tomcat插件的安装
- 学习python用哪个app-Python和R:学哪个好?
- 动态asp网页批量生成静态html网页问题
- 安装QT5后运行提示libHelp.so无法加载
- 【机器学习】PyCaret!又一个神仙的自动机器学习库!
- 彻底删除 XP 自带的 Windows Messenger方法
- 这一次,用数据解读玩家行为,用实力拿下预测大奖!
- Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)
- 机器学习算法概述:随机森林逻辑回归
- JAVA学习-JAVA数组的使用示例
- django学习笔记:AdminSite界面配置
- 英文书: Python 网络编程基础手册
- Codeforces Round 1 - 10总结 【@Abandon】
- Java二级练习试题一
- 查看极域电子教室的密码
- JavaEE三大框架ssh
- python论文排版格式_Latex论文排版工具使用教程
- 忘记vmware虚拟机系统登入密码如何破解,破解vmware登录密码。
- 搜索关键词优化 助力全网霸屏营销