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

类别:软件工程 点击:0 评论:0 推荐:

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

 

本文地址:http://com.8s8s.com/it/it33595.htm