zoukankan      html  css  js  c++  java
  • javascript

    状态模式笔记
       当一个对象的内部状态发生改变时,会导致行为的改变,这像是改变了对象
       状态模式既是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支
       主要目的:将条件判断的不同结果转化为状态对象的内部状态,既然是状态对象的内部状态,所以作为状态对象内部的私有变量,然后提供一个能够调用状态对象内部状态的接口方法对象。
       最终目的:简化分支判断流程
       当有许多判断时,如果用if或者switch条件判断语句来写,是很难维护的,因为增加或删除一个条件需要改动的地方太多了
       其次组合条件用if或switch分支判断实现,无形中增加的成本是无法想象的。

    状态类

     1             //状态类
     2             var State = function(){
     3                 var _currentState = {},
     4                 states = {
     5                     one : function(){
     6                         console.log("状态one");
     7                     },
     8                     two : function(){
     9                         console.log("状态two");
    10                     },
    11                     three : function(){
    12                         console.log("状态three");
    13                     },
    14                     four : function(){
    15                         console.log("状态four");
    16                     },
    17                     five : function(){
    18                         console.log("状态five");
    19                     }
    20                 };
    21                 //控制类
    22                 var Action = {
    23                     changeState : function(){
    24                         //组合动作由多个参数实现
    25                         var arg = arguments;
    26                         //重置内部状态
    27                         _currentState = {};
    28                         if(arg.length){
    29                             for(var i=0, len = arg.length; i < len; i++){
    30                                 //从内部状态添加动作
    31                                 _currentState[arg[i]] = true;
    32                             }
    33                         }
    34                         return this;
    35                     },
    36                     goes : function(){
    37                         //遍历内部状态保存的动作
    38                         for(var i in _currentState){
    39                             //如果该动作就执行
    40                             states[i] && states[i]();
    41                         }
    42                         return this;
    43                     }
    44                 }
    45                 return {
    46                     change : Action.changeState,
    47                     goes : Action.goes
    48                 }
    49             }

    两种方式执行这个状态类

      1. 函数方式

    1 State().change('one','three').goes().goes().change('two').goes();

      2. 实例化类

    1             var state = new State();
    2             state.change('one','three').goes().goes().change('two').goes();

    控制台显示

  • 相关阅读:
    spark Kryo serialization failed: Buffer overflow 错误
    spark sql加载avro
    Java读写hdfs上的avro文件
    spark使用scala读取Avro数据(转)
    spark遇到的错误1-内存不足
    php数据表
    php商品详情页的修改
    php ecshop前台修改
    php的文件
    php文件的学习
  • 原文地址:https://www.cnblogs.com/jtnote/p/6004176.html
Copyright © 2011-2022 走看看