状态模式

概念介绍

状态模式(State):当一个对象的内部状态发生改变时,会导致其行为的改变,这看起来像是改变了对象

示例演示

在我们写项目的过程中或多或少会遇到如下的多分支判断

function show(value){
if(value==0){
console.log(0);
}else if(value==1){
console.log(1);
}else if(value==2){
console.log(2);
}
}

万一哪天需求变更需要调整结果,那就很麻烦了。那么我们有什么办法既可以减少代码中的条件判断语句,又能使每种判断情况独立存在呢?

这个时候我们就可以用到状态模式了,状态模式很适合这类分支条件内部独立结果的管理。

每一种条件对应对象内部的一种状态,面对不同判断结果,它其实就是选择对象内的一种状态。

下面我们用状态模式实现刚才的例子

//返回状态结果对象
var ResutlState=function(){
//把结果保存在内部对象中
var States={
//每种状态作为一种独立的方法保存
state0:function(){
console.log(0);
},
state1:function(){
console.log(1);
},
state2:function(){
console.log(2);
}
}
//获取对应方法
function show(result){
States['state'+result]&&States['state'+result]();
}
return{
//返回调用状态方法
show:show
}
}();

好了我们试着调用一下

ResutlState.show(1);

总结

状态模式即是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支。在程序中到底产出哪种行为结果,决定于选择哪种状态,而选择何种状态又是在程序运行时决定的,当然状态模式最终的目的即是简化分支判断流程。

也谢谢大家看到这里:)如果你觉得我的分享还可以请点击推荐,分享给你的朋友让我们一起进步~

好了以上就是本次分享的全部内容,本次示例参考自JavaScript设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

欢迎转载,转载请注明作者,原文出处。

最新文章

  1. Sql Server系列:游标
  2. BZOJ1026: [SCOI2009]windy数[数位DP]
  3. js中的逻辑与(&&)和逻辑或(||)
  4. Symbiont
  5. JS中跨域和沙箱的解析
  6. ASP和ASP.NET发送邮件笔记
  7. hdu 4762 公式 java
  8. iostat命令
  9. Spring的线程池ThreadPoolTaskExecutor使用案例
  10. Android开发环境下关于如何导出手机通讯录数据库【Written By KillerLegend】
  11. Python 3.2: 使用pymysql连接Mysql
  12. phpStudy 2014的Apache虚拟主机配置
  13. Linux web工程部署远程必备软件安装
  14. angularJs项目实战!01:模块划分和目录组织
  15. GDI 开发的准备工作
  16. 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
  17. eclipse启动tomcat错误解决
  18. python 文件下载
  19. nignx部署Vue单页面刷新路由404问题解决
  20. 【转】Spring、Spring MVC、MyBatis整合文件配置详解

热门文章

  1. ubuntu上安装apache2+mysql+php5-fpm(PHP5 - FastCGI Process Manager)
  2. jquery 的页面下拉选项
  3. 看望朋友(家达)--->>对事情的专注及时间效率学习
  4. akoj-1076-Encoding
  5. 学习jdbc学习笔记
  6. cobbler无人值守批量安装Linux系统
  7. [STM32F429-DISCO-HAL]4.Uart 的使用
  8. python学习===从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
  9. C#多线程的用法1-简单示例
  10. SQL优化二(Sql性能调优)