谁在状态模式中定义状态转换?
2022-09-03 06:38:37
我了解到,可用于对根据状态更改行为的对象进行建模,并且可以具有的各种状态封装在表示接口的具体类中。我不清楚的是,在这种模式中,状态转换是如何发生的。个人是否知道并决定谁跟随他们,还是决定下一步将获得哪种状态?State pattern
Context
State
states
Context
我了解到,可用于对根据状态更改行为的对象进行建模,并且可以具有的各种状态封装在表示接口的具体类中。我不清楚的是,在这种模式中,状态转换是如何发生的。个人是否知道并决定谁跟随他们,还是决定下一步将获得哪种状态?State pattern
Context
State
states
Context
来自 GOF 设计模式一书(这在实现部分):
1. 谁定义了状态转换?状态模式不指定哪个参与者定义状态转换的条件。如果标准是固定的,那么它们可以完全在上下文中实现。然而,一般而言,让国家子类本身指定其继承国和何时进行过渡是比较灵活和适当的。这需要向上下文添加一个接口,该接口允许 State 对象显式设置上下文的当前状态。
以这种方式分散转换逻辑使得通过定义新的 State 子类来修改或扩展逻辑变得容易。权力下放的一个缺点是,一个国家子类将至少知道另一个子类,这引入了子类之间的实现依赖关系。
也许可以澄清一个比较具体的例子。我希望我正确地理解它
假设洗衣机有两种状态(开、关)。以下 GoF 词汇:
对于状态转换,通过状态子类(在我们的例子中为 StateOn 和 StateOff),我们需要有一个方法来更改状态上下文:
class WashingMachine {
WashingMachineState state;
...
protected void setState(WashingMachineState newState) {
state = newState;
}
someMethod () {
...
state.pushStartButton(this);
...
}
}
abstract class WashingMachineState {
protected void run();
protected void pushStartButton(WashingMachine wm);
}
class StateOn extends WashingMachineState {
...
void pushStartButton(WashingMachine wm) {
wm.setState(new StateOff())
}
}
class StateOff extends WashingMachineState {
...
void pushStartButton(WashingMachine wm) {
wm.setState(new StateOn())
}
}
请记住,有几种方法可以实现它,创造力会有所帮助!