js设计模式--状态模式(16)
-
问题场景
状态不同,某个方法的具体操作不同。方法庞大,充斥if-else语句 -
解决思路
把状态从context中抽离出来。状态内部封装同一方法的不同行为,context把请求委托给状态对象 -
具体操作
JavaScript无需创建状态类,也不需事先让一个对象持有另一个对象(传统面向对象,是互相引用,context和state互相持有对象实例),可直接调用相应的方法(对象字面量的属性或者闭包),并apply/call传入的this来修改context状态。
表驱动的有限状态机???有待研究 -
优缺点
优点把方法大拆小,便于观察、增减状态
缺点:传统面向对象的思路中,产生许多state对象可能存在性能问题(可用享元模式优化)5.补充
策略模式的区别和联系: 相同点,都是一个context类和一个策略/状态类(负责具体操作)。区别:1.状态类间切换事先规定,策略类彼此无关。2.客户不需了解状态类的内部行为,策略类客户需要直接调用策略类的方法,因此需要知道。