这是我可能会从“设计模式,可重用的面向对象编程的元素”一书中误解这句话。
上下文可以将自身作为参数传递给处理请求的State对象。这使State对象可以在必要时访问上下文。
如果传递了ConcreteState,则Request(this);
的上下文是否允许该State更改上下文本身?
在此示例中,我正在处理的上下文是Windows Form
,其状态为FormStart
和FormStop
。我想进行更改,以便在更改状态时,表单中的某些按钮被禁用/显示为灰色。据我所知,ConcreteState的构造函数可以将上下文作为参数传递,然后状态可以对上下文进行更改。
我正在使用的定义是:
答案 0 :(得分:1)
STATE 模式不禁止该状态更改Context
。
GoF书中 STATE 一章的示例代码部分的报价:
在这种情况下,的状态
TCPState
[...]也可以更改TCPConnection
TCPConnection
是Context
。
代码显示了修改上下文的状态的另一个示例:
void TCPEstablished::Transmit(TCPConnection* t, TCPOctetStream* o) {
t->processOctet(o);
}
在TCPConnection
中传输内容可能会导致TCPConnection
中的更改。
所以,绝对可以。