状态模式往往会带来代码量的增加,但是它也许是解决某些需求场景的最好方法,状态模式的关键是区分事物内部的状态,事物内部的状态往往会带来事物行为的改变。
if/else/switch的情况
实际开发中,我们可能会遇到使用大量if/else/switch的情况,根据不同的状态,通过判断执行不同状态对应的逻辑操作,比如如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//执行动作
function doAction(state){
//state0
if(state === '0'){
console.log('执行0');
}
//state1
if(state === '1'){
console.log('执行1');
}
//state2
if(state === '2'){
console.log('执行2');
}
}
|
状态变多即使用switch也会越来越繁琐,这时候就可以使用状态模式了。
状态模式改善
状态模式,就是将每一种条件作为对象内部的一种状态,面对不同的判断结果,我们只需选择不同的状态便可.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
var ResultState = function(){
//各种情况的业务逻辑保存在内部状态中
var states = {
state1:function(){
console.log('情况一的业务逻辑');
},
state2:function(){
console.log('情况二的业务逻辑');
},
state3:function(){
console.log('情况三的业务逻辑');
}
}
//获取某一状态的对应逻辑并执行
function show(state){
states[state] && states[state]();
}
return {
doActionByState: show
}
}();
// 传入状态,即会执行状态所对应的业务逻辑。
ResultState.doActionByState('state1');
|
promise
es6中的promise内部就是一个状态机。