美文网首页
状态模式

状态模式

作者: 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中放置许多条件判断的替代方案;

相关文章

  • State模式

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

  • 设计模式-状态模式

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

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

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

  • C++设计模式(3)

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

  • 设计模式——状态模式

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

  • 第5章 -行为型模式-状态模式

    一、状态模式的简介 二、状态模式的优缺点 三、状态模式的实例

  • 状态模式

    Android进阶之设计模式 状态模式 定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了...

  • 状态模式

    状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。允许对象随着状态改变而改变行为。 策略...

  • 状态模式

    《大话设计模式》阅读笔记和总结。原书是C#编写的,本人用Java实现了一遍,包括每种设计模式的UML图实现和示例代...

  • 状态模式

    状态模式 一个对象有状态变化 每次状态变化都会触发一个逻辑 不能总是用 if...else 来控制 示例 交通灯信...

网友评论

      本文标题:状态模式

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