javascript - 狀態模式 - 簡化分支判斷流程

狀態模式筆記
   當一個對象的內部狀態發生改變時,會致使行爲的改變,這像是改變了對象
   狀態模式既是解決程序中臃腫的分支判斷語句問題,將每一個分支轉化爲一種狀態獨立出來,方便每種狀態的管理又不至於每次執行時遍歷全部分支
   主要目的:將條件判斷的不一樣結果轉化爲狀態對象的內部狀態,既然是狀態對象的內部狀態,因此做爲狀態對象內部的私有變量,而後提供一個可以調用狀態對象內部狀態的接口方法對象。
   最終目的:簡化分支判斷流程
   當有許多判斷時,若是用if或者switch條件判斷語句來寫,是很難維護的,由於增長或刪除一個條件須要改動的地方太多了
   其次組合條件用if或switch分支判斷實現,無形中增長的成本是沒法想象的。函數

狀態類this

 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             }

兩種方式執行這個狀態類spa

  1. 函數方式code

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();

控制檯顯示blog

相關文章
相關標籤/搜索