状态模式主要是为了能在运行期改变状态。
1、故事
人的经济状况决定了生活状况,他们或许富可敌国又或者穷困潦倒。这两种状态——富有和贫穷——会随着时间相互变化(古语有云:穷不过三代 富不过三代)。按照这种观点,我们举个例子:一般人都是在贫困时拼命工作(努力),在富裕时享受生活(懈怠)。他们所处的生活状态决定了他们的行为,而他们的行为又将会改变他们的生活状态,否则,这个社会就不公平了!
2、类图
下面是状态模式的类图,你可以和策略模式(Strategy Pattern)对比下,以便能更好的理解两者的不同之处。
3、源码
状态模式的Java实现如下,将给你演示它的工作流程。
State Clases
package com.programcreek.designpatterns.state;
interface State {
public void saySomething(StateContext sc);
}
class Rich implements State{
@Override
public void saySomething(StateContext sc) {
System.out.println("I'm rick currently, and play a lot.");
sc.changeState(new Poor());
}
}
class Poor implements State{
@Override
public void saySomething(StateContext sc) {
System.out.println("I'm poor currently, and spend much time working.");
sc.changeState(new Rich());
}
}
StateContext Class
package com.programcreek.designpatterns.state;
public class StateContext {
private State currentState;
public StateContext(){
currentState = new Poor();
}
public void changeState(State newState){
this.currentState = newState;
}
public void saySomething(){
this.currentState.saySomething(this);
}
}
测试的Main Class
import com.programcreek.designpatterns.*;
public class Main {
public static void main(String args[]){
StateContext sc = new StateContext();
sc.saySomething();
sc.saySomething();
sc.saySomething();
sc.saySomething();
}
}
I'm poor currently, and spend much time working. I'm rick currently, and play a lot. I'm poor currently, and spend much time working. I'm rick currently, and play a lot.
原文链接:http://www.programcreek.com/2011/07/java-design-pattern-state/