我理解State pattern
可以用来模拟根据状态改变行为的对象,Context
可以拥有的各种状态被封装在代表{{1}的具体类中接口。我不清楚的是状态转换是如何在这种模式中发生的。个人State
是否知道并决定谁跟踪他们,或者是states
决定下一个会得到哪个州?
答案 0 :(得分:11)
从GOF设计模式书(这是实施部分):
1。谁定义了状态转换?状态模式未指定哪个参与者定义状态转换的标准。如果标准是固定的,那么它们可以完全在上下文中实现。然而,通常更灵活和适当的是让State子类本身指定其后继状态以及何时进行转换。这需要向Context添加一个接口,让State对象显式设置Context的当前状态。
以这种方式分散转换逻辑,可以通过定义新的State子类来轻松修改或扩展逻辑。分散化的一个缺点是一个State子类将至少知道另一个子类,这引入了子类之间的实现依赖性。
答案 1 :(得分:4)
假设洗衣机有两种状态(ON,Off)。关注GoF词汇:
对于状态转换,通过状态子类(在我们的例子中是StateOn和StateOff),我们需要有一个方法来改变状态Context:
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())
}
}
请记住,有几种方法可以实现它,创造力有帮助!