10. 状态模式

2021-03-08  本文已影响0人  bit_拳倾天下

什么是状态模式?

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

比如说,一个类在运行时会根据某个属性的状态值做出不同的反应,我们可以用 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 对象的执行方法完成调用。真的傻傻分不清楚,此时需要从目的上分析了。

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

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

上一篇下一篇

猜你喜欢

热点阅读