美文网首页
10. 状态模式

10. 状态模式

作者: bit_拳倾天下 | 来源:发表于2021-03-08 17:16 被阅读0次

    什么是状态模式?

    他允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类。

    比如说,一个类在运行时会根据某个属性的状态值做出不同的反应,我们可以用 if 做判断,每个状态做出对应的行为动作。

    //执行类
    class Executer{
      int state;
      method(){
        if(state == 0){
            ...
        }else if(state == 1){
            ...
        }else if(state == 2){
            ...
        }else if...
      }
    }
    

    但是状态模式会把这部分抽取到一个状态 interface,内部声明一系列方法,然后创建子类去实现它,每个子类代表一种状态,原来的运行代码中就可以动态的注入状态类对象,只要调用这个对象的方法就行了,不用大量的 if 判断。例:

    //状态接口
     interface State{
        execute();
     }
    
    //状态类
    class StateA implements State{
      final int state = 0;
      Executer ex;
      execute(){
        //实现逻辑
        //可以用 ex 改变状态
      }
    }
    
    //改造一下执行类
    class Executer{
      State state;
      method(){
        ...
        state.execute();
        ...
      }
    }
    

    把变化的部分封装到接口中,然后具体的行为委托给注入进来的 State 对象,这听起来就像是策略模式。而且和命令模式也很像,可以把 State 看做一个命令啊,然后通过注入的 State 对象的执行方法完成调用。真的傻傻分不清楚,此时需要从目的上分析了。

    策略模式,是为了给不同的类定义行为。
    命令模式,是为了封装调用,甚至可以实现撤销。
    状态模式,则是为了类能够根据状态的改变完成不同的行为,必要时执行方法可以触发状态的改变。

    这么一说好像有点这个意思:没错,是很相似,但是做不同的事就有不同的叫法。。。

    相关文章

      网友评论

          本文标题:10. 状态模式

          本文链接:https://www.haomeiwen.com/subject/hvopqltx.html