您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
业务架构设计
4月18-19日 在线直播
基于UML和EA进行系统分析设计
4月25-26日 北京+在线
AI 智能化软件测试方法与实践
5月23-24日 上海+在线
     
   
 
 订阅
用状态机模式消除复杂的 if else 逻辑
 
作者:木野狐
   次浏览      
 2012-12-8
 
编辑推荐:
本文介绍用状态机模式消除复杂的 if else 逻辑,希望对您的学习有所帮助。
本文来自cnblogs,由火龙果软件Linda编辑、推荐。

前一阵开发的一个 web 界面上有很多诸如“按钮隐藏显示”,“边框隐藏显示”,“伸缩” 等效果的切换,在展示不同内容的时候,这些配套的显示控件需要跟着切换不同的状态。迫于进度,使用的是 if..else, 或者 switch..case 的繁杂的 js 代码来实现这些状态的判断和转换。js 代码很快到了 400~500行,变得很难理解。并且我要加入新的状态切换的时候感觉比较困难。今天决心重构,于是忽然联想起状态机 (State Machine) 模式,不正好在这里能用上吗?而 js 中的对象表示语法正好非常方便构造“状态表”和“状态轮换表”,花了1个多小时,完成了这个工作。重构后代码的逻辑可谓豁然开朗,带来的仅仅是配置上的稍许冗余,但是这个完全可以接受的。

大致的伪代码:  

// 状态表定义
var statusTable = {    '状态1': {
        sizeCode: 1,
        headerUrl: '/test1/test2',
        bodyUrl: 'about:blank',
        showTitle: true,
        showBorder: true,
        showMin: true,
        showMax: false,
        showClose: true
    },
    '状态3': {         sizeCode: 2,         headerUrl: '/test1/test2',         bodyUrl: '/test1/test2',         showTitle: 
true,         showBorder: true,         showMin: true,         showMax: true,         showClose: true     },     '状态4': {         sizeCode: 3,         headerUrl: '/test1/test2',         bodyUrl: '/test1/test2',         showTitle: true,         showBorder: true,         showMin: true,         showMax: false,         showClose: true     },     '状态2': {         sizeCode: 2,         headerUrl: '/test1/test2',         bodyUrl: '/test1/test2',         showTitle: true,         showBorder: true,         showMin: true,         showMax: false,         showClose: true     } }; // 当前状态码 var currentStatusCode = '';
// 切换到状态机某个状态    function loadStatus(code){     var status = statusTable[code] || null;     if(!status) return;     
    
// update other status     // 利用 status 做一系列设置。。如显示隐藏按钮等     //           currentStatusCode = code; }

// 示例函数 foo 和 bar. // 一个函数是一套自定义的逻辑,定义一个状态轮换表即可实现。 function foo(){     var jumpTable = {         '状态1': '',         '状态2': '状态1',         '状态3': '状态4',         '状态4': ''     };
    loadStatus(jumpTable[currentStatusCode] || ''); }
function bar(){     var jumpTable = {         '状态1': '状态2',         '状态2': '',         '状态3': '状态1',         '状态4': '状态3'     };     loadStatus(jumpTable[currentStatusCode] || ''); }
   
次浏览       
相关文章

一文了解汽车嵌入式AUTOSAR架构
嵌入式Linux系统移植的四大步骤
嵌入式中设计模式的艺术
嵌入式软件架构设计 模块化 & 分层设计
相关文档

企点嵌入式PHP的探索实践
ARM与STM简介
ARM架构详解
华为鸿蒙深度研究
相关课程

嵌入式C高质量编程
嵌入式操作系统组件及BSP裁剪与测试
基于VxWorks的嵌入式开发、调试与测试
嵌入式单元测试最佳实践

最新活动计划
业务架构设计与建模 4-18[北京]
DeepSeek大模型开发实践 4-19[在线]
基于 UML 和EA进行分析设计 4-26[北京]
产品经理与产品管理 5-8[上海]
AI智能化软件测试方法与实践 5-23[上海]
图数据库与知识图谱 5-22[北京]
 
 
最新文章
基于FPGA的异构计算在多媒体中的应用
深入Linux内核架构——简介与概述
Linux内核系统架构介绍
浅析嵌入式C优化技巧
进程间通信(IPC)介绍
最新课程
嵌入式Linux驱动开发
代码整洁之道-态度、技艺与习惯
嵌入式软件测试
嵌入式C高质量编程
嵌入式软件可靠性设计
成功案例
某军工所 嵌入式软件架构
中航工业某研究所 嵌入式软件开发指南
某轨道交通 嵌入式软件高级设计实践
深圳 嵌入式软件架构设计—高级实践
某企业 基于IPD的嵌入式软件开发
更多...