javascript - 状态模式 - 简化分支判断流程
2016-10-27 15:35
183 查看
状态模式笔记
当一个对象的内部状态发生改变时,会导致行为的改变,这像是改变了对象
状态模式既是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支
主要目的:将条件判断的不同结果转化为状态对象的内部状态,既然是状态对象的内部状态,所以作为状态对象内部的私有变量,然后提供一个能够调用状态对象内部状态的接口方法对象。
最终目的:简化分支判断流程
当有许多判断时,如果用if或者switch条件判断语句来写,是很难维护的,因为增加或删除一个条件需要改动的地方太多了
其次组合条件用if或switch分支判断实现,无形中增加的成本是无法想象的。
状态类
两种方式执行这个状态类
1. 函数方式
2. 实例化类
控制台显示
当一个对象的内部状态发生改变时,会导致行为的改变,这像是改变了对象
状态模式既是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支
主要目的:将条件判断的不同结果转化为状态对象的内部状态,既然是状态对象的内部状态,所以作为状态对象内部的私有变量,然后提供一个能够调用状态对象内部状态的接口方法对象。
最终目的:简化分支判断流程
当有许多判断时,如果用if或者switch条件判断语句来写,是很难维护的,因为增加或删除一个条件需要改动的地方太多了
其次组合条件用if或switch分支判断实现,无形中增加的成本是无法想象的。
状态类
1 //状态类 2 var State = function(){ 3 var _currentState = {}, 4 states = { 5 one : function(){ 6 console.log("状态one"); 7 }, 8 two : function(){ 9 console.log("状态two"); 10 }, 11 three : function(){ 12 console.log("状态three"); 13 }, 14 four : function(){ 15 console.log("状态four"); 16 }, 17 five : function(){ 18 console.log("状态five"); 19 } 20 }; 21 //控制类 22 var Action = { 23 changeState : function(){ 24 //组合动作由多个参数实现 25 var arg = arguments; 26 //重置内部状态 27 _currentState = {}; 28 if(arg.length){ 29 for(var i=0, len = arg.length; i < len; i++){ 30 //从内部状态添加动作 31 _currentState[arg[i]] = true; 32 } 33 } 34 return this; 35 }, 36 goes : function(){ 37 //遍历内部状态保存的动作 38 for(var i in _currentState){ 39 //如果该动作就执行 40 states[i] && states[i](); 41 } 42 return this; 43 } 44 } 45 return { 46 change : Action.changeState, 47 goes : Action.goes 48 } 49 }
两种方式执行这个状态类
1. 函数方式
1 State().change('one','three').goes().goes().change('two').goes();
2. 实例化类
1 var state = new State(); 2 state.change('one','three').goes().goes().change('two').goes();
控制台显示
相关文章推荐
- 简化分支判断的设计模式
- javascript入门系列演示·流程控制之 判断、循环
- javaScript判断iframe状态
- JavaScript复习之--流程控制-分支结构
- javascript中的分支判断与循环
- 深入理解JavaScript系列(43):设计模式之状态模式
- javascript入门系列演示·流程控制之 判断、循环
- javascript判断页面状态
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第22讲_js三大流程控制(顺序流程、分支控制、循环控制)_学习笔记_源代码图解_PPT文档整理
- 拨号时获取双卡状态及飞行模式判断(设置)
- Javascript设计模式之我见:状态模式
- JavaScript判断DropDownList是否处于展开状态(check if DropDownList (select) is expanded)
- javascript判断iphone/android手机横竖屏模式的函数
- javascript判断iphone/android手机横竖屏模式
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第23讲_js三大流程控制(顺序流程、分支控制、循环控制)_js调式技巧_学习笔记_源代码图解_PPT文档整理
- JavaScript 对加载页面状态的判断
- javascript判断iphone/android手机横竖屏模式--转帖于腾讯搜搜web开发博客
- 深入理解JavaScript系列(43):设计模式之状态模式
- 使用Promise模式来简化JavaScript的异步回调
- javascript快速入门3--分支判断与循环