当一个对象的内部状态发生该改变时,会导致至行的改变,状态模式最终的母的及时简化分支判断流程
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>状态模式</title>
</head>
<body>
<!--<script>-->
<!--let Revote = function () {-->
<!--States = {-->
<!--state0:function () {-->
<!--console.log("状态一");-->
<!--},-->
<!--state1:function () {-->
<!--console.log("状态二");-->
<!--},-->
<!--state2:function () {-->
<!--console.log("状态三");-->
<!--}-->
<!--}-->
<!--function show(obj) {-->
<!--return States['state'+obj]&&States['state'+obj]();-->
<!--}-->
<!--return{-->
<!--show:show-->
<!--}-->
<!--}();-->
<!--Revote.show(1);-->
<!--</script>-->
<script>
let Marry =function () {
//定义一个静态变量存储动作
let StateCurrent ={};
//状态类
let States = {
jump:function () {
//跳跃
console.log("jump");
},
move:function () {
//移动
console.log('move');
},
shoot:function () {
//射击
console.log("shoot");
},
squat:function () {
//蹲下
console.log('squat');
}
}
//动作类
let Action ={
//改变状态
changeAction:function () {
//组合动作通过传递多个参数的方法
var arg = arguments;
//重值状态对象动作
StateCurrent ={};
if(arg.length)
for (let i =0;i<arg.length;i++){
//添加动作到临时动作对象
StateCurrent[arg[i]]=true;
}
return this;
},
go:function () {
console.log('执行一次');
//通过状态变量执行对对应的函数
for (let i in StateCurrent){
States[i]&&States[i]();
}
return this;
}
}
return {
change:Action.changeAction,
go:Action.go
};
}
let marry = new Marry();
marry.change("jump","shoot").go();
</script>
</body>
</html>