美文网首页
状态模式

状态模式

作者: zhaoyubetter | 来源:发表于2016-11-18 23:52 被阅读10次

    将事物的每个状态的行为放入各自的类中,每个状态实现自己的动作;
    当事物发生动作时,通过动作委托到状态类;

    好处:

    1. 事物每个状态的行为局部化到它自己的类中;
    2. 可将事物类中各种状态剔除掉,利于维护;
    3. 状态对 “修改关闭”,事物类,对扩展开放;

    状态模式的定义:
    状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改他的类;

    类图

    Paste_Image.png
    1. context上下文对象:用于一些内部状态,分别用来表示上下文对象的各种状态;
    2. State:所有具体状态类的基类,State接口定义了所有具体状态的共同接口;
      这样一来,context中的当前状态之间就可以相互替换;
    3. ConcreteStateA: 具体状态类,处理来自Context中的请求,当context改变状态时,实际上,调用的不同状态对象中的方法,这样就实现了 context 的状态切换了;

    与策略模式对比:
    意图不同

    1. 状态模式,将一群行为封装在状态对象中,context的行为可随时委托到一群状态对象中的一个,随着程序运行,当前状态在状态对象集合中游走改变,用来反映出context内部的状态,这样context的行为也跟着变化(因为context的行为通过状态来表示了嘛),但context的客户并不需要考虑context内部是如何工作的;
    2. 策略模式,客户主动指定Context所要组合的策略对象是哪一个,对于context来说,通常只有一个最合适的策略对象;

    一般下,我们把策略模式想象成 除了继承之外的一种弹性替代方案;
    我们把状态模式想成是不用在context中放置许多条件判断的替代方案;

    相关文章

      网友评论

          本文标题:状态模式

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