美文网首页
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. 状态模式

    什么是状态模式? 他允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类。 比如说,一个类在运行时会根...

  • 10.策略模式

    1.是什么 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用...

  • 10.继承模式

    继承发展史: 1.传统形式 --> 原型链 过多的继承了没有用的属性 prototype 2.借用构造函数 不能继...

  • 10.严格模式

    认识严格模式 在ECMAScript5标准中,JavaScript提出了严格模式的概念(Strict Mode):...

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 状态模式(状态机模式)

    状态模式学习笔记 前言:文章从三方面简单阐述状态模式:是什么、为什么、如何做。这是我在工作之余自己的一些理解、思考...

  • C++设计模式(3)

    本文预览: 状态模式 组合模式 迭代器 职责链 命令 状态模式 定义:状态模式(State Pattern),允许...

  • 共读一本书"做导师型父母——从16个方向发现孩子的天赋"第16天

    16个方向发现孩子的天赋—— 10.了解孩子的语言模式 语言模式简单来说,就是如何说话的学问。有一种方式叫...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

网友评论

      本文标题:10. 状态模式

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