ConcreteState 对象能否更改它们所在的上下文?

Can the ConcreteState objects make changes to the context in which they reside?

我可能误解了本书这一部分的引述 "Design Patterns, Elements of Reusable Object-Oriented Programming"。

A context may pass itself as an argument to the State object handling the request. This lets the State object access the context if necessary.

如果 ConcreteState 是从 Request(this); 传递的上下文,该 State 是否允许对上下文本身进行更改?

在我处理上下文的示例中,Windows Form 具有 FormStartFormStop 等状态。我想进行更改,以便在状态更改时,表单中的某些按钮 disabled/grayed 消失。据我所知,可以将上下文作为参数传递给 ConcreteState 的构造函数,然后状态可以对上下文进行更改。

我正在使用的定义是:

STATE 模式不禁止状态对 Context 进行更改。

引用 GoF 书 STATE 章节的 示例代码 部分:

TCPState [...] can also change the state of a TCPConnection

TCPConnection 是本例中的 Context

该代码显示了状态修改上下文的另一个示例:

void TCPEstablished::Transmit(TCPConnection* t, TCPOctetStream* o) {
    t->processOctet(o);
}

TCPConnection 中传输某些内容可能会导致 TCPConnection 中的内容发生变化。

所以,当然,是的,这是允许的。