软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
设计模式复习笔记(状态模式)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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.    ContextClient的主要接口。Client可以为State对象配置context。一旦一个context对象被配置了,它的clients不会直接跟State对象打交道。

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

 

Consequences

State

 




相关文章

相关软件




月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有