注:这个模式是非常聪明的,很有点数学中组合的意思,现在,来看下这个模式是怎么个思想。

问题提出:假如某个操作有三种可能,分别为1,2,3,还可能是组合,比如先执行1,再执行2或者先执行2再执行3或者1,2,3等等,用常规的判定,代码如下:

        if (result == ) {
//执行方法
}
else if (result == ) {
//执行方法
}
else if (result == ) {
//执行方法
}
//....

现在只有3个结果的组合,如果是10个呢,这个判断条件就会无比复杂!

状态模式就是解决这种问题,它的思路比较巧妙,其思路是:把每种可能的结果都对应出来,如果出现某个可能就将其置为true,然后再扫描各个标志位,接着执行方法,一张图一目了然。

##示例代码:

        var ResultState = function () {
var _currentState = {}; //状态 var States = { //状态和状态对应的方法
1: function () {
console.log('执行1');
},
2: function () {
console.log('执行2');
},
3: function () {
console.log('执行3');
}
};
/**************行为****************/
var Action = { changeStae: function () { /******改变状态******/
var arg = arguments;
_currentState = {};
if (arg.length) {
for (var i = 0; i < arg.length; i++) {
_currentState[arg[i]] = true;//选中
}
}
return this;
},
fire: function () { /******执行方法******/
for (var i in _currentState) {
States[i] && States[i]();
}
return this;
}
};
return {
change: Action.changeStae,
fire: Action.fire
}
}; var o = ResultState();
o.change(2, 3).fire().change(1, 3).fire().change(1, 2, 3).fire();

最新文章

  1. php 随记
  2. Linux启动过程详解(转)
  3. 访问ControlTemplate内部的元素
  4. jq实现竞拍倒计时
  5. OMXCodec与OMX事件处理流程
  6. C++Builder String 转 char* (转)
  7. Swift中自定义打印方法
  8. js动态加载js css文件,可以配置文件后辍,防止浏览器缓存
  9. mysql数据库死锁的产生原因及解决办法
  10. ASP.NET Core 中断请求了解一下(翻译)
  11. Web前端框架与移动应用开发第八章
  12. 小甲鱼Python第七讲课后习题
  13. Android 之 Fagment 完全解析
  14. Vivado使用技巧(二):封装自己设计的IP核
  15. Spring Framework 官方文档学习(三)之Resource
  16. linux c开发环境构成
  17. RouterOS DNS劫持(转)
  18. [ActionScript 3.0] 动态改变影片剪辑的颜色
  19. codeforces 228E The Road to Berland is Paved With Good Intentions(2-SAT)
  20. Docker 网络之端口绑定

热门文章

  1. C语言常用关键字及运算符操作
  2. python 标准输入输出sys.stdout. sys.stdin
  3. c++ 备忘
  4. mount重新挂载为写模式
  5. RNA测序研究现状与发展
  6. 爬取掌阅app免费电子书数据
  7. id不连续
  8. Spring 注解驱动(一)基本使用规则
  9. jmeter脚本录制的两种方式
  10. JS原型与原型链