博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的设计模式:状态模式
阅读量:4919 次
发布时间:2019-06-11

本文共 1360 字,大约阅读时间需要 4 分钟。

前几天写了一个贪吃蛇小游戏,正好用到了状态模式。

定义

当一个对象内部状态发生改变时候,会导致其行为的改变,这看起来像是改变了对象。

简单的例子

如果一个函数要更具某一个对象的状态来判断该对象应该执行的方法,那么这个函数中会增加很多if判断分支,并且,如果要增加这个对象的一种状态,那么就要在原来的代码中添加一些判断,比较麻烦。例如,贪吃蛇有移动、吃食物、死亡等状态,如果我在处理这些状态的时候这么写代码(如下面)

this.process = function(point){        if (this.ifDie(point)) {            this.energy.stopGame();            return;        }               //eating        if (this.eatable(point)) {            this.energy.removePoint(point);            this.addPoint(point);//添加节点            this.manager.addScore();            this.productFood();        }               //moving        else {            this.addPoint(point);            this.delTail();//删除尾部界面        }

 这里更具point来判断是什么状态,然后用游戏引擎渲染这个画面,如果在给蛇增加一种休息的状态,那么代码中就要增加if判断了,所以修改后的代码是这样的

self.state = {        die:function(){            self.energy.stop();        },        eatable:function(point){            self.energy.removeFood(point);            self.addPoint(point);            self.energy.addScore();            self.productFood();        },        moving:function(point){            self.addPoint(point);            self.delTail();        }    };//蛇的状态    self.currentState = null;Snake.prototype.process = function(currentState,point){    this.state[currentState](point);}

完整的代码在https://github.com/YAMAPM/greedySnake.

状态模式有点像策略模式,都是根据不同的传递参数实现不同的功能

 

转载于:https://www.cnblogs.com/bdbk/p/5297919.html

你可能感兴趣的文章
属性动画
查看>>
html5中<body>标签支持的事件
查看>>
F. 约束
查看>>
Codeforces 735D. Taxes
查看>>
nexus的安装
查看>>
iOS-截图和把截图封装成一个方法
查看>>
activiti保存流程图的同时没有保存图片
查看>>
对Python3编码的整理!!!
查看>>
论”犯贱“ --生活小记
查看>>
Python标准库:内置函数ascii(object)
查看>>
MySQL查询优化(转)
查看>>
586. Customer Placing the Largest Number of Orders
查看>>
依存分析 Dependency Parsing
查看>>
Django框架——forms.ModelForm使用
查看>>
SSH小应用
查看>>
Jsp
查看>>
实验6:Problem H: 字符串类(II)
查看>>
静态区间第k大 树套树解法
查看>>
虚方法与抽象方法有什么区别?
查看>>
JQuery操作DOM
查看>>