JavaScript设计模式样例十五 —— 状态模式
状态模式(State Pattern)
定义:创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
目的:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
场景:游戏角色有跳跃、移动、射击、蹲下等状态设定,如果用if-else或者switch来进行判断,在遇到组合动作的时候,判断会变得非常复杂难读,这时可以使用状态模式来实现。
class SuperHero {
constructor () {
this.currentState = []
this.states = {
jump () {
console.log('jump')
},
move () {
console.log('move')
},
shoot () {
console.log('shoot')
},
squat () {
console.log('squat')
}
}
}
// 更改当前状态
change (arr) {
this.currentState = arr
return this
}
run () {
console.log('..... begin start ......')
this.currentState.forEach(item => this.states[item] && this.states[item]())
return this
}
}
new SuperHero()
.change(['jump', 'squat'])
.run()
.change(['move', 'shoot'])
.run()
Git地址:https://github.com/skillnull/Design-Mode-Example
JavaScript设计模式样例十五 —— 状态模式的更多相关文章
- javascript设计模式学习之十六——状态模式
一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...
- Javascript设计模式理论与实战:状态模式
在软件开发中,很大部分时候就是操作数据,而不同数据下展示的结果我们将其抽象出来称为状态,我们平时开发时本质上就是对应用程序的各种状态进行切换并作出相应处理.状态模式就是一种适合多种状态场景下的设计模式 ...
- 前端读者 | Javascript设计模式理论与实战:状态模式
本文来自 @狼狼的蓝胖子:链接:http://luopq.com/2015/11/25/design-pattern-state/ 在软件开发中,很大部分时候就是操作数据,而不同数据下展示的结果我们将 ...
- Java设计模式菜鸟系列(十五)建造者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...
- javascript设计模式学习之十五——装饰者模式
一.装饰者模式定义 装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象.这种为对象动态添加职责的方式就称为装饰者模式.装饰者对象和它所装饰的对象拥有一致的接口,对于用 ...
- JavaScript设计模式 样例二 —— 策略模式
策略模式(Strategy Pattern): 定义:定义了一族算法: 封装了每个算法: 这族的算法可互换代替. 目的:将算法的使用与算法的实现分离开来. 场景:可用来消除大量的条件分支语句. 例:J ...
- JavaScript设计模式 样例一 —— 工厂模式
工厂模式(Factory Pattern): 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 目的:工厂模式是为了解耦,把对象的创建和使用 ...
- JavaScript设计模式样例四 —— 单例模式
单例模式(Singleton Pattern): 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 目的:阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例. 场景: ...
- JavaScript设计模式 样例三 —— 装饰模式
装饰模式(Decorator Pattern): 定义:在不改变原对象的情况下,动态的给对象添加一些额外的职责.就功能而言,装饰模式相比生成子类更为灵活. 目的:把类的核心职责和装饰功能区分开.可以去 ...
- C#设计模式之十九状态模式(State Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第六个模式,该模式是[状态模式],英文名称是:State Pattern.无论是现实世界,还是面向对象的OO世界,里面都有一个东西, ...
随机推荐
- WPF 做一个超级简单的 1024 数字接龙游戏
这是一个我给自己做着玩的游戏,没有什么复杂的界面,就一些简单的逻辑 游戏的规则十分简单,那就是有多个列表.程序会给出一个数字,玩家决定数字放在哪个列表里面.如果放入列表里面的数字和列表里面最后一个数字 ...
- Linux 驱动:LED子系统
Linux 驱动:LED子系统 背景 在调试aw9523的时候,为了实现客户要的一个效果.需要修改驱动,但是大概看了一下驱动,但是因为不太熟悉LED子系统,所以有点云里雾里. 参考: https:// ...
- Android Framework:如何让 App 拿到Power key 值
Android app:如何让 App 拿到Power key 值 原文(有删改):https://blog.csdn.net/qq_37858386/article/details/10383566 ...
- P3355 骑士共存问题题解
题目链接:P3355 骑士共存问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题解: 棋盘问题考虑黑白染色成为二分图后做. 观察马的性质,可知一个点只能到一个异色点,所以,构造 ...
- hive案例:hive对房产数据进行过滤
数据: 天通苑北一区 3室2厅 510万 1.01101E+11 天通苑北一区 3-2厅 143.09 平米 南北 简装 有电梯 35642 510旗胜家园 2室1厅 385万 1.01101E+11 ...
- Oracle 递归拼接字段
效果 sql SELECT LISTAGG(T.NAME, ' / ') WITHIN GROUP(ORDER BY LEVEL DESC) AS RESULT FROM S_WORK_RESOURS ...
- Java 对象转XML xStream 别名的使用 附下载方式
下载方式 Maven方式 pom.xml中 <dependency> <groupId>xstream</groupId> <artifactId>xs ...
- git push提交出现Everything up-to-date提示问题
以前通过git提交代码到GitHub上的个人main分支时,曾出现过这样一个很低级的错误-- 出现这个错误原因,其实就是没有正确执行指令造成的,也就是没有正常提交数据. 一般按照以下命令提交,基本就没 ...
- webgl(threejs)生成房间楼层
楔子 在很多数字孪生项目中,都会涉及到楼层的建模.楼层的建模由于结构繁多,如果都是建模师进行手动建模,工作量会比较大.而楼层本身的结构,可以抽象成可以通过路径构造的对象(这和之前的文章提及的的管路以及 ...
- [oeasy]python0068_控制序列_清屏_控制输出位置_2J
光标位置 回忆上次内容 上次了解了键盘演化的过程 ESC 从 组合键 到 独立按键 ESC 的目的 是进入控制序列 配置控制信息 控制信息 \033[y;xH 设置光标位置 \033[2J 清屏 这到 ...