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

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

控制台显示

posted on 2016-10-27 15:35  惊涛随笔  阅读(795)  评论(0编辑  收藏  举报

导航