5

我正在阅读有关状态模式的信息。我才刚刚开始,所以我当然要从阅读关于它的整个Wikipedia 文章开始。

我注意到文章中的两个示例都有一些基本抽象类或 Java 接口,用于通用 State 的方法/函数。然后有一些从基础继承并以不同方式实现这些方法/功能的状态。然后是一个 Context 类,它有一个 State 类型的私有成员,并且在任何时候,它都可以等于其中一个实现的实例。该上下文类也实现了相同的方法,并将它们传递给当前状态实例,然后有一个额外的方法来改变状态(或者根据设计,我理解状态的改变可能是对已实现方法之一的反应) .

为什么这个上下文类不专门“扩展”或“实现”通用 State 基类/接口?

4

2 回答 2

6

因为状态是一个实现细节,而不是其接口的一部分。即上下文不是一个状态,它只有一个状态。上下文的用户甚至不需要知道它有一个状态。

于 2010-05-28T17:58:10.553 回答
0

根据 GOF 的说法,它的字面意思是:

'上下文可以将自己作为参数传递给处理请求的状态对象。这让 State 对象可以在必要时访问上下文。

查看他们的 TCPConnection/TCPState 示例,TCPState 包含对 TCPConnection 的具体引用。

所以变得更抽象,具体状态可以持有对具体状态上下文对象的引用,以设置新状态。但是,我也看到了用于状态更新的主题/观察者,而不是使用 StateContext->setState(State)。

我还看到人们让 StateContext 为特定于域的接口实现 State 接口。

于 2019-12-26T19:16:46.220 回答