我知道State pattern可以用来对根据状态改变行为的对象进行建模,并且Context可以具有的各种状态被封装在表示State接口的具体类中。我不清楚的是在这种模式中状态转换是如何发生的。个体states知道并决定谁跟随他们,还是Context决定它将获得下一个状态?
State pattern
Context
State
states
myzjeezk1#
来自GOF设计模式书(在实现部分):
xam8gpfp2#
可能是一个比较具体的例子可以澄清。我希望我的理解是正确的假设洗衣机具有两种状态(开、关)。以下是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()) } }
只要记住有几种方法来实现它,创造力有助于!
62lalag43#
我喜欢的一种状态转换模式是为两个状态之间的每个转换使用单独的类。这允许状态仅负责进入、执行和退出此状态时发生的情况,但单独的代码控制从一个状态到另一个状态的转换。当一个复杂的动作只需要在一个转换到另一个转换时,这允许更具体的操作。
3条答案
按热度按时间myzjeezk1#
来自GOF设计模式书(在实现部分):
xam8gpfp2#
可能是一个比较具体的例子可以澄清。我希望我的理解是正确的
假设洗衣机具有两种状态(开、关)。以下是GoF词汇:
对于状态转换,通过状态子类(在我们的例子中是StateOn和StateOff),我们需要一个方法来改变状态Context:
只要记住有几种方法来实现它,创造力有助于!
62lalag43#
我喜欢的一种状态转换模式是为两个状态之间的每个转换使用单独的类。
这允许状态仅负责进入、执行和退出此状态时发生的情况,但单独的代码控制从一个状态到另一个状态的转换。当一个复杂的动作只需要在一个转换到另一个转换时,这允许更具体的操作。