State

定义

  状态模式属于对象的行为模式。

  状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。这个模式将状态封装成为单独的类,并将动作委托到代表当前状态的对象。  

  一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的对象。

结构和角色

  

 
抽象状态(State)角色 : 定义一个接口,用以封装环境对象的一个特定的状态所对应的行为。

具体状态(ConcreteSate)角色 : 每一个具体状态类都实例了环境的一个状态所对应的行为。

环境(Context)角色 : 保留各种具体状态对象,和定义当前状态对象。 此类的行为委派给具体State对象。

什么时候使用状态模式

  一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变。

  对象在某个方法里依赖一重或多重的条件转移语句。状态模式把条件转移语句的每一个分支都包装到一个单独的类里。

应用

  状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。所有与一个特定的状态有关的行为都被包装到一个特定的对象里面,使得行为的定义局域化。

  状态改变,不必采用过程性的处理方式,来改变行为。

优缺点

  便于维护和扩展,遵守开闭原则,

  缺点是,会造成大量的小的状态类。

这个模式的结构图和策略模式的结构图是一样的,不过他们的意图不一样。

环境角色是否有明显的状态和状态的过渡。如果环境角色只有一个状态, 那么应当使用策略模式。

策略模式,一旦环境角色选择了一个具体策略类,那么在整个环境类的生命周期里它都不会改变这个具体策略类。

状态模式,环境角色有明显的状态转移,在环境类的生命周期里面,会有几个不同的状态对象被使用。

State,码迷,mamicode.com

时间: 2025-01-12 14:56:58

State的相关文章

[PReact] Use Link State to Automatically Handle State Changes

Storing and updating values inside a component’s local state (known as controlled components) is such a common pattern that Preact offers a really handy feature called ‘link state’ that not only removes the need to bind class methods, but also handle

error: bad top line in state file /var/lib/logrotate.status 解决方法

发现日志切割并没有按计划执行,后来手动强制执行时,发现如下报错: [[email protected] logrotate.d]# logrotate -f httpd error: bad top line in state file /var/lib/logrotate.status [[email protected] logrotate.d]# 解决访求: 删除/var/lib/logrotate.status 这个文件即可解决. 解决后,最好再运行一下logrotate -f /etc

State状态模式(C++实现)

状态模式:状态模式的意图是,允许一个对象在其内部状态改变时,改变它的行为.看起来就像是改变了它的类一样. 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化. 类图如下图所示 State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为.ConcreteState类,具体状态,每一个子类实现一个与Context的一个状态相关的行为.Context类,维护一个ConcreteState子类

设计模式(20)--State(状态模式)--行为型

作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样. 2.模式特点: 状态模式的主要优点在于封装了转换规则,并枚举可能的状态,它将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为,还可以

[Preact] Use State and Props in the Component Render Function

Preact offers, in addition to the regular component API from React, the ability to access both props & state as function parameters to the render method. This lesson will cover an example of how to utilize this convenience along with how destructurin

为sharepoint 2013 开启 State Service

State Service的作用: The State Service service application is used to maintain state. This is one of those goofy .NET developer things which is the equivalent of writing on your hand. It holds the information temporarily while you use it and then it goe

[AngualrJS NG-redux] Map State and Dispatchers to Redux

In this lesson, we are going to learn how to map our Angular component directly to our application store using the connect method on ngRedux. In Angular, it is a common technique to bind a controller property directly to the model so that our control

设计模式-状态模式(State Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 状态模式简介 状态模式允许一个对象在其内部状态改变的时候改变它的行为,他的内部会存着好几种状态,在当前状态发生变化是,这个对象执行和之前相同的操作也会有不同的作用效果. 状态模式的定义和基本结构 定义:状态模式允许一个对象在其内部状态改变的时候改变它的行为,就像变成了另一个对象一样. 一张来自<Head First>的结构图 Context:这个类里面包含了很多种状态类,当前状态不同时,这个

reactjs入门到实战(四)---- state详解

this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性. 组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI 组件其实是状态机(State Machines) React 把用户界面当作简单状态机.把用户界面想像成拥有不同状态然后渲染这些状态,可以轻松让用户界面和数据保持一致. React 里,只需更新组件的 state,然后根据新的 s

使用ASP.NET State Server实现多应用程序间共享Session State

原以为ASP.NET State Server原生支持多程序间共享SESSION,以为在同一服务器上 & 同一根域名下部署的多个应用程序间设置了相同了<sessionState/>和<machineKey/>事情就成了! 事实证明是自己TOO YOUNG TOO SIMPLE.根本不WORK! BING了一大轮,再找了一下度娘,看到以下较有参考价值的文章: http://forums.asp.net/t/1759392.aspx?Share+sessions+between