设计模式复习笔记(状态模式)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

State(状态)模式

Intent

允许一个对象在内部状态改变时,行为也相应改变. 看上去就像不同的类一样.

Also Known As

Objects for States

Motivation

考虑一个类TCPConnection,表达网络的连接。一个TCPConnection对象可以处于若干不同状态之一:Established, Listening或者Closed。当一个TCPConnection对象从其他对象那里接收请求之后,他依赖于当前状态有不同的响应。例如,根据连接是在Closed状态还是Established状态,同样的Open请求的效果会不同。状态模式描述了TCPConnection可以怎样在不同的状态下展现不同的行为。

这种模式的关键思想是引入了一个TCPState的抽象类来表达网络连接的状态。TCPState类为所有表达操作状态的类宣告了一个共同的接口。TCPState的子类实现了不同状态的行为。

Applicability

在下列情形中可以使用State模式:

情形1。 一个对象的行为依赖于其状态,而且必须在运行时根据状态的不同改变行为

情形2。 操作有大量,多方的条件性语句,依赖于对象的状态。这个状态通常由一个或多个枚举常量表达。通常,若干操作将包含同样的条件结构。状态模式把条件的不同分支装到不同的类里。这样你就可以把对象的状态本身当作一个对象来对待,拥有它自己的权利和义务,从而可以与其它的对象区别开来。

Structure

Participants

1. Context (TCPConnection)

-定义Client感兴趣的接口

-维护定义当前状态的ConcreteState子类的实例

2. State (TCPState)

-定义一个封装Context特定状态关联行为的接口

3. ConcreteState subclasses (TCPEstablished, TCPListen, TCPClosed)

-每一个子类都实现了一种跟Context状态关联的行为

Collaborations

1. Context把特定于状态的请求委托给当前的ConcreteState对象

2. 一个context可以把自己作为参数传递给处理请求的State对象。这样State对象在必要时就可以访问conext了

3. Context是Client的主要接口。Client可以为State对象配置context。一旦一个context对象被配置了,它的clients不会直接跟State对象打交道。

4. Context或者ConcreteState子类都不能决定哪个状态之后是哪个状态,以及那种情况下有哪个状态。

Consequences

State

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航