JS设计模式之状态模式概念与用法分析


Posted in Javascript onFebruary 05, 2018

本文实例讲述了JS设计模式之状态模式概念与用法。分享给大家供大家参考,具体如下:

1. 概述

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

2. 解决的问题

主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。

function Context( _state ) {
 this.state = _state;
 this.request = function() {
  this.state.Handle( this );
 }
}
function ConcreteStateA() {
 this.Handle = function( context ) {
  console.log("A");
  context.state = new ConcreteStateB();
 }
}
function ConcreteStateB() {
 this.Handle = function( context ) {
  console.log("B");
  context.state = new ConcreteStateA();
 }
}
// 设置Context的初始状态为ConcreteStateA
var context = new Context(new ConcreteStateA());
// 不断地进行请求,同时更改状态
context.request();
context.request();

状态模式的使用场景也特别明确,有如下两点:

一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

一个操作中含有大量的分支语句,而且这些分支语句依赖于该对象的状态。状态通常为一个或多个枚举常量的表示。

应用场景:

打电话有如下几种状态:获取电话号码、拨号中、通话中、通话结束。
这几种状态的顺序是以次进行的,那么我们就可以根据这几种状态来实现状态模式;

获取电话号码

JS设计模式之状态模式概念与用法分析

拨号中

JS设计模式之状态模式概念与用法分析

通话中

JS设计模式之状态模式概念与用法分析

通话结束

JS设计模式之状态模式概念与用法分析

不断地去调用这个方法context.request(); 来判断当前属于那种状态;

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
如何用JavaScript动态呼叫函数(两种方式)
May 03 Javascript
jQuery动画animate方法使用介绍
May 06 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
Jan 09 Javascript
自写的jQuery异步加载数据添加事件
May 15 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
Vue如何从1.0迁移到2.0
Oct 19 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
Jul 02 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
Javascript前端下载后台传来的文件流代码实例
Aug 18 Javascript
js实现自动锁屏功能
Jun 02 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 #Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 #Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 #Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 #Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 #Javascript
javascript实现最长公共子序列实例代码
Feb 05 #Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 #Javascript
You might like
PHP的博客ping服务代码
2012/02/04 PHP
php header功能的使用
2013/10/28 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
详细介绍Python函数中的默认参数
2015/03/30 Python
Python WSGI的深入理解
2018/08/01 Python
3种python调用其他脚本的方法
2020/01/06 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
运动会致辞稿50字
2014/02/04 职场文书
领班岗位职责范文
2014/02/06 职场文书
小学生家长寄语
2014/04/02 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android