您的位置:首页 > Web前端 > JavaScript

javascript - 状态模式 - 简化分支判断流程

2016-10-27 15:35 183 查看
状态模式笔记
当一个对象的内部状态发生改变时,会导致行为的改变,这像是改变了对象
状态模式既是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支
主要目的:将条件判断的不同结果转化为状态对象的内部状态,既然是状态对象的内部状态,所以作为状态对象内部的私有变量,然后提供一个能够调用状态对象内部状态的接口方法对象。
最终目的:简化分支判断流程
当有许多判断时,如果用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();


控制台显示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: