美文网首页
State模式

State模式

作者: 飞絮搅青冥 | 来源:发表于2021-04-29 00:02 被阅读0次

状态模式这一章感觉没有读得很懂,主要他的定义什么感觉也没有讲得特别清楚,一开始感觉和策略模式有点像,但是后面反而越看越糊涂了,网上找了一些分析也总感觉差点意思,先这样吧,等整本书看完再回头好好研究研究,说不定有更多的发现。先摘录一下网上我看到比较好的理解。

  • 定义:
    很多时候,一个对象的行为会根据一个动态的属性变化而变化,这样的一个对象我们可以称为是有状态的对象。
    那么状态模式就是允许一个对象在其内部状态改变时候去改变对象的行为。 状态模式的关键就是区分其对象内部动态变化状态是什么。
  • 归纳分析:
    把变化的属性(状态)封装成不同的类, 并把请求委托给当前的对象状态, 不同的状态此时执行不同的行为
    从使用者角度看, 我们使用的对象在不同状态下有不同的行为, 彷佛这个对象是由不同类实例化而来, 这是因为请求委托的缘故。
  • 优点:
    状态模式定义的状态-行为的对应关系, 并将其封装在一个类里面, 我们只需要扩展具体状态类就可以扩展需求。
    避免了Context类的代码无限膨胀和过多的条件分支判断。
    Context类中的请求于具体状态类的行为隔离互补影响。
  • 缺点:
    如果状态类很多, 需要不断扩展代码量。
    状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
    状态模式对“开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。
  • 状态模式的性能优化点
    管理State对像的创建与销毁: 有两种方式实现
  1. 仅仅当Satte对象需要的时候才去创建(节省内存)。这个适合与那些State对象比较庞大的情景。
  2. 一开始就创建所有的State对象,适用于State对象不多,以及状态频繁切换使用的情景。
    我们上面的例子是一开始就创建了所有的State对象, 而且是为每一个Context类实例都创建了一组State对象,实际上我们这些State对象是可以在不同的Context类之间进行共享的。
  • 适用环境
    对象的行为依赖于它的状态(属性)并且可以根据它的状态改变而改变它的相关行为。
    代码中包含大量与对象状态有关的条件语句,这些条件语句的出现,会导致代码的可维护性和灵活性变差,不能方便地增加和删除状态,使客户类与类库之间的耦合增强。在这些条件语句中包含了对象的行为,而且这些条件对应于对象的各种状态。

相关文章

  • State模式

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

  • state模式

    编译都没过,发生点事,心有点乱 随便看看就好 state.h #ifndef _STATE_H#define _S...

  • State模式

    状态模式这一章感觉没有读得很懂,主要他的定义什么感觉也没有讲得特别清楚,一开始感觉和策略模式有点像,但是后面反而越...

  • Node.js 设计模式笔记 —— State 模式

    State 模式是一种特殊形式的 Strategy 模式:Context 选择的具体策略根据不同的 state 发...

  • 2.设计模式用例(二)

    备忘录模式 2.装饰器模式 外观模式 State Pattern

  • Boolan 第十三周 设计模式(三)

    状态变化模式 典型模式 State Memento 1 state目的是应对对象状态变化,行为也要随之变化,保持对...

  • 敏捷软件开发 - 原则、模式与实践 —— 设计模式(十二)STA

    本文为敏捷软件开发 - 原则、模式与实践系列的一部分。 本文对应原书第29章 STATE模式 STATE模式既具有...

  • State状态模式

    状态模式的核心是将状态抽象为类,然后将状态的改变包含在类中,这样就避免了在client中写出大量的if...els...

  • 状态模式(State)

    结构 模式的组成环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,...

  • 状态模式(State)

    定义允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects fo...

网友评论

      本文标题:State模式

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