位置: 编程技术 - 正文

深入理解JavaScript系列(43):设计模式之状态模式详解(深入理解新发展理念,推进供给侧结构性改革)

编辑:rootadmin

推荐整理分享深入理解JavaScript系列(43):设计模式之状态模式详解(深入理解新发展理念,推进供给侧结构性改革),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入理解ffmpeg pdf,深入理解中国式现代化,深入理解新发展理念,推进供给侧结构性改革,深入理解中国式现代化,深入理解新发展理念,深入理解javascript,深入理解计算机系统,深入理解javascript特性,内容如对您有帮助,希望把文章链接给更多的朋友!

介绍

状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类。

正文

举个例子,就比如我们平时在下载东西,通常就会有好几个状态,比如准备状态(ReadyState)、下载状态(DownloadingState)、暂停状态(DownloadPausedState)、下载完毕状态(DownloadedState)、失败状态(DownloadFailedState),也就是说在每个状态都只可以做当前状态才可以做的事情,而不能做其它状态能做的事儿。

由于State模式描述了下载(Download)如何在每一种状态下表现出不同的行为。这一模式的关键思想就是引入了一个叫做State的抽象类(或JS里的函数)来表示下载状态,State函数(作为原型)为每个状态的子类(继承函数)声明了一些公共接口。其每个继承函数实现与特定状态相关的行为,比如DownloadingState和DownloadedState分别实现了正在下载和下载完毕的行为。这些行为可以通过Download来来维护。

让我们来实现一把,首先定义作为其他基础函数的原型的State函数:我们为State的原型定义了4个方法接口,分别对应着下载(download)、暂停(pause)、失败(fail)、结束(finish)以便子函数可以重写。

在编写子函数之前,我们先来编写一个ReadyState函数,以便可以将状态传递给第一个download状态:

该函数接收了一个Download维护函数的实例作为参数,Download函数用于控制状态的改变和获取(类似于中央控制器,让外部调用),ReadyState重写了原型的download方法,以便开始进行下载。我们继续来看Download函数的主要功能:

深入理解JavaScript系列(43):设计模式之状态模式详解(深入理解新发展理念,推进供给侧结构性改革)

Download函数的原型提供了8个方法,4个是对用于下载状态的操作行为,另外4个是用于获取当前四个不同的状态,这4个方法都接收this作为参数,也就是将Download实例自身作为一个参数传递给处理该请求的状态对象(ReadyState 以及后面要实现的继承函数),这使得状态对象比必要的时候可以访问oDownlaod。

接下来,继续定义4个相关状态的函数:

DownloadingState的主要注意事项就是已经正在下载的文件,不能再次开始下载了,其它的状态都可以连续进行。DownloadPausedState函数里要注意的是,已经暂停的下载,不能再次暂停。

DownloadedState函数,同理成功下载以后,不能再设置finish了,只能设置重新下载状态。同理,DownloadFailedState函数的失败状态,也不能再次失败,但可以和finished以后再次尝试重新下载。

调用测试代码,就非常简单了,我们在HTML里演示吧,首先是要了jquery,然后有3个按钮分别代表:开始下载、暂停、重新下载。(注意在Firefox里用firebug查看结果,因为用了 console.log方法)。

总结

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

1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有大量的分支语句,而且这些分支语句依赖于该对象的状态。状态通常为一个或多个枚举常量的表示。

深入理解JavaScript系列():设计模式之原型模式详解 介绍原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象。正文对于原型模式,我们可以利用JavaScript特有的

深入探讨javascript中的数据类型 学一门编程语言,无非两方面:一是语法,二是数据类型。类C语言的语法不外乎if、while、for、函数、算术运算等,面向对象的语言再加上object。语法只

深入理解JavaScript系列():Function模式(上篇) 介绍本篇主要是介绍Function方面使用的一些技巧(上篇),利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:回调模式、配置对象、返

标签: 深入理解新发展理念,推进供给侧结构性改革

本文链接地址:https://www.jiuchutong.com/biancheng/382870.html 转载请保留说明!

上一篇:深入理解JavaScript系列(44):设计模式之桥接模式详解(深入理解javascript特性)

下一篇:深入理解JavaScript系列(42):设计模式之原型模式详解(深入理解javascript特性.pdf)

  • 核定征收三种方式
  • 银行提供资金
  • 展会补贴收入会计处理
  • 管道安装固定方式
  • 如何在金蝶算季度利润表发生额
  • 电商平台返佣金税务怎么走
  • 采购设备包含安装费用吗
  • 利息保障倍数计算公式资本化利息
  • 小规模纳税人汇算清缴要填什么表
  • 公户可以在淘宝下单吗
  • 开业赠送礼品会计属于什么费用
  • 装饰设计费计入什么科目
  • 开个人普发票需要什么资料?
  • 小规模纳税人查账征收所得税税率
  • 伙食费没有发票可以税前扣除吗
  • 应付和预付账款的区别
  • 小规模纳税人纳税申报时间
  • 职工福利费支出计入什么科目
  • 支票遗失要怎么补办
  • 月末税金及附加税金的账务处理
  • 现金福利支出需要申报个税吗
  • 对账单和电子回单区别
  • 其他专项收入怎么做账
  • 关于解决经费问题的请示
  • 支付工程款需要什么财务手续
  • 预付维修费计入入账价值吗
  • linux 网络故障
  • 百合花怎么养殖简单
  • win10怎么隐藏菜单栏图标
  • PHP:zip_close()的用法_Zip函数
  • 玩的最多的手机网游
  • 远眺格斯韦因斯泰因村和格斯韦因斯泰因城堡 (© Juergen Sack/Getty Images)
  • 企业所得税计算器在线计算
  • php数据库分页是怎么实现的
  • 机器学习报错解决2——ValueError: too many values to unpack (expected 3)
  • 作废发票需要拿回执单吗
  • 叮咚你有一份好运请查收图片
  • 常用激活函数及其导数
  • 微信php开发包
  • 企业销售固定资产房屋都要交什么税
  • 非货币型资产交换CPA
  • php usort函数
  • java同步操作
  • 月底分红
  • 预交的诉讼费怎么做账
  • 农民专业合作组织法律制度的类型包括哪些?
  • 公司用车租赁
  • 固定资产未登记入账
  • 三证合一后税务登记机关
  • 房地产企业成本核算方法
  • 农业用地租赁是免税的吗
  • 坏账确认无法收回
  • 单位组织提供员工服务
  • 收到货款会计分录怎么写
  • 如何取消已经生产的产品
  • 企业中征码怎么查询
  • 公司法人借款给公司用责任承担
  • 职工教育经费中的职工培训费用可以全额扣除吗
  • 工程施工借贷方向
  • 借用别的公司资质的协议范本
  • sql语句错误提示
  • mac电脑双系统
  • [视频]看科学家如何将纯净水变成金属
  • mac怎么自己定制
  • fedora打不开
  • ubuntu15.04系统怎么使用卸载命令卸载软件?
  • 如何设置win10系统输入法
  • win7 64位系统双击桌面所有程序提示"文件没有与之关联的程序来执行"的解决方法
  • 如何延长mac待机时间
  • win7手动更新在哪里设置
  • cocos creator 资源加密
  • unity2019新功能
  • Cocos2dx3.2 Crazy Tetris 绘制不规则方块 遮罩(ClippingNode的使用)
  • JavaScript的21条基本知识点
  • javascript的判断语句
  • python爬虫的几种方法
  • ubuntu系统的手机
  • 组织收入原则三个务必
  • 电子税务完税证明怎么打印
  • 税控盘如何查询季度统计
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设