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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
javascript匿名函数应用示例介绍
Mar 07 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
JavaScript实现简单的tab选项卡切换
Jan 05 Javascript
JS获取鼠标选中的文字
Aug 10 Javascript
input file上传 图片预览功能实例代码
Oct 25 Javascript
JS对象深度克隆实例分析
Mar 16 Javascript
js 用于检测类数组对象的函数方法
May 02 Javascript
javascript实现延时显示提示框效果
Jun 01 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 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用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
JavaScript 比较时间大小的代码
2010/04/24 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
信息滚动效果的实例讲解
2017/09/18 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python中的并发编程实例
2014/07/07 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
《我的第一本书》教学反思
2014/02/15 职场文书
同学毕业留言寄语
2015/02/27 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
Vue h函数的使用详解
2022/02/18 Vue.js