javascript设计模式——状态模式

状态模式即是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支。在程序中到底产生哪种行为结果,决定与选择哪种状态,而选择何种状态又是在程序运行时决定的。当然状态模式最终的目的即是简化分支判断流程。

分支判断模式实现

  // 实现超级玛丽,因为她有很多东西,走,跳,射击,如果用if或者switch判断,造成很多判断分支
  // 单动作条件判断,每增加一个动作要添加一个判断
  var lastAction = ''
  function changeMarry(action) {
    if (action === 'jump') {

    } else if (action === 'move') {

    } else {

    }
    lastAction = action
  }
  // 复合动作对条件判断的开销是翻倍的
  var lastAction1 = ''
  var lastAction2 = ''
  function changeMarry(action1, action2) {
    if (action1 === 'shoot') {

    } else if (action1 === 'jump') {

    } else if (action1 === 'move' && action2 === 'shoot') {

    } else if (action1 === 'jump' && action2 === 'shoot') {

    }
    lastAction1 = action1 || ''
    lastAction2 = action2 || ''
  }

使用状态模式实现

    var MarryState = function () {
      var _currentState = {},
        states = {
          jump: function () {
            console.log('jump')
          },
          move: function () {
            console.log('move')
          },
          shoot: function () {
            console.log('shoot')
          },
          squat: function () {
            console.log('squat')
          }
        }
      var Action = {
        changeState: function () {
          var arg = arguments
          _currentState = {}
          if (arg.length) {
            for (var i = 0, len = arg.length; i < len; i++) {
              _currentState[arg[i]] = true
            }
          }
          return this
        },
        goes: function () {
          console.log("触发一次动作")
          for (var i in _currentState) {
            states[i] && states[i]()
          }
          return this
        }
      }
      return {
        change: Action.changeState,
        goes: Action.goes
      }
    }
    MarryState().change('jump', 'shoot')
    .goes()
    .goes()
    .change('shoot')
    .goes()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容