js设计模式--状态模式(16)

  1. 问题场景
    状态不同,某个方法的具体操作不同。方法庞大,充斥if-else语句

  2. 解决思路
    把状态从context中抽离出来。状态内部封装同一方法的不同行为,context把请求委托给状态对象

  3. 具体操作 js设计模式--状态模式(16)
    JavaScript无需创建状态类,也不需事先让一个对象持有另一个对象(传统面向对象,是互相引用,context和state互相持有对象实例),可直接调用相应的方法(对象字面量的属性或者闭包),并apply/call传入的this来修改context状态。
    表驱动的有限状态机???有待研究

  4. 优缺点
    优点把方法大拆小,便于观察、增减状态
    缺点:传统面向对象的思路中,产生许多state对象可能存在性能问题(可用享元模式优化)

    5.补充
    策略模式的区别和联系: 相同点,都是一个context类和一个策略/状态类(负责具体操作)。区别:1.状态类间切换事先规定,策略类彼此无关。2.客户不需了解状态类的内部行为,策略类客户需要直接调用策略类的方法,因此需要知道。