状态模式
- 创建表示各种状态的对象
- 创建一个行为随着状态对象改变的context对象
解决问题
对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为 对象状态(改变)------对象行为(改变)
- 状态模式:我要变成这种状态,需要做些什么行为才能变成这种状态呢?
- <font color=purple>非状态模式</font>:我做些什么行为,才能改变成这种状态呢?
何时使用?
当代码中包含大量与对象状态有关的条件语句
如何解决?
将各种具体的状态类抽象出来
例子
开发一个菜单组件,菜单拥有最基本的两种状态:显示和隐藏,相应的显示或隐藏可能会有各自的其他操作。使用状态模式的话,我们首先定义一个环境类,在这里也就是菜单对象,简单地定义如下:
function Menu(){}; Menu.prototype.toggle = function (state) { state(); }
这个菜单类有一个toggle方法用来切换状态,然后调用相应的处理方法。 接着我们定义两种状态,定义如下:
var menuStates = { "show": function () { console.log("the menu is showing"); }, "hide": function () { console.log("the menu is hiding"); } };
- 在这里,通过一个对象menuStates来定义menu的状态,这里有两种状态show和hide,然后拥有相应的处理方法。在使用的时候通过下面的方法进行调用:
var menu = new Menu(); menu.toggle(menuStates.show); menu.toggle(menuStates.hide);
- 在这里,通过一个对象menuStates来定义menu的状态,这里有两种状态show和hide,然后拥有相应的处理方法。在使用的时候通过下面的方法进行调用: