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乱码与contentType属性设置问题解决方案
Jan 07 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
Nov 24 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
如何提高javascript加载速度
Dec 26 Javascript
vuejs父子组件通信的问题
Jan 11 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
Jun 22 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 简易输出CSV表格文件的方法详解
2013/06/20 PHP
php随机抽奖实例分析
2015/03/04 PHP
php控制文件下载速度的方法
2015/03/24 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
原生js实现随机点名
2020/07/05 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
pygame实现弹球游戏
2020/04/14 Python
python识别验证码的思路及解决方案
2020/09/13 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
灰雀教学反思
2014/04/28 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2014年物流工作总结
2014/11/25 职场文书
现货白银电话营销话术
2015/05/29 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
Nginx的基本概念和原理
2022/03/21 Servers
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫