深入理解JavaScript系列(43):设计模式之状态模式详解
介绍
状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类。
正文
举个例子,就比如我们平时在下载东西,通常就会有好几个状态,比如准备状态(ReadyState)、下载状态(DownloadingState)、暂停状态(DownloadPausedState)、下载完毕状态(DownloadedState)、失败状态(DownloadFailedState),也就是说在每个状态都只可以做当前状态才可以做的事情,而不能做其它状态能做的事儿。
由于State模式描述了下载(Download)如何在每一种状态下表现出不同的行为。这一模式的关键思想就是引入了一个叫做State的抽象类(或JS里的函数)来表示下载状态,State函数(作为原型)为每个状态的子类(继承函数)声明了一些公共接口。其每个继承函数实现与特定状态相关的行为,比如DownloadingState和DownloadedState分别实现了正在下载和下载完毕的行为。这些行为可以通过Download来来维护。
让我们来实现一把,首先定义作为其他基础函数的原型的State函数:
varState=function(){
};
State.prototype.download=function(){ thrownewError("该方法必须被重载!"); };
State.prototype.pause=function(){ thrownewError("该方法必须被重载!"); };
State.prototype.fail=function(){ thrownewError("该方法必须被重载!"); };
State.prototype.finish=function(){ thrownewError("该方法必须被重载!"); };