林秀栋的技术博客

设计模式(十六) 状态模式

简化if else的分支判断,防止逻辑修改导致大面积修改

var State = function(){
    //内部状态私有变量
    var _currentState = {},
        //动作与状态方法映射
        states = {
            x1: function(){
                console.log(111);
            },
            x2: function(){
                console.log(222);
            },
            x3: function(){
                console.log(333);
            }
        };
    //动作控制类
    var Action = {
        //改变状态方法
        changeState: function(){
            var arg = arguments;
            _currentState = {};	//重置内部状态
            if(arg.length){
                for(var i = 0, len = arg.length; i < len; i++){
                    _currentState[arg[i]] = true;
                }
            }
            //返回动作控制类
            return this;
        },
        //执行动作
        goes: function(){
            for(var i in _currentState){
                //如果该动作存在则执行
                states[i] && states[i]();
            }
            return this;
        }
    }
    return {
        change: Action.changeState,
        goes: Action.goes
    }

}

var k = new State();
k.change('x2', 'x1')
 .goes()
 .goes()
 .change('x3')
 .goes();

从六开始到十六的设计模式属于行为型设计模式