5.8 STATE(状态) — 对象行为型模式

2018-01-07  本文已影响39人  10xjzheng
1 意图

允许一个其对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

2 别名

状态对象(Objects For States)

3 动机

考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listening)、连接已关闭(Closed)。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态作出不同的反应。例如,一个Open请求的结果依赖于该连接是处于连接已关闭状态还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。

这一模式的关键思想是引入了一个称为TCPState的抽象类来表示网络的连接状态。TCPState类为各表示不同的操作状态的子类声明了一个公共接口。TCPState的子类实现与特定状态相关的行为。例如,TCPEstablished和TCPClosed类分别实现了特定于TCPConnection的连接已建立状态和连接已关闭状态的行为。


image.png

TCPConnection类维护一个表示TCP连接当前状态的状态对象(一个TCPState子类的实例)。TCPConnection类将所有与状态相关的请求委托给这个状态对象。TCPConnection使用它的TCPState子类实例来执行特定于连接状态的操作。
一旦连接状态改变,TCPConnection对象就会改变它所使用的状态对象。例如当连接从已建立状态转为已关闭状态时,TCPConnection会用一个TCPClosed的实例来代替原来的TCPEstablished的实例。

4 适用性

在下面的两种情况下均可使用State模式:

5 结构
image.png
6 参与者
7 协作
8 效果

State模式有下面一些效果:

9 实现

实现State模式有多方面的考虑:

10 代码示例

github地址

上一篇 下一篇

猜你喜欢

热点阅读