设计模式-状态模式

2019-01-072535
陈佳良
web研发

状态模式

  • 创建表示各种状态的对象
  • 创建一个行为随着状态对象改变的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);
分享
点赞1
打赏
上一篇:代理工具Fiddler -调试与替换接口状态
下一篇:钉钉开发初步探索和总结