状态模式主要是为了在运行的时候来回切换状态。
1、状态模式故事
人们生活在不同的财富状况下,他们有些富有,有些却贫穷。这两种状态——富有和贫穷,随着时间的推移可能会相互转化。人们在贫穷的时候通常都会努力工作,而富有的时候常常玩乐。他们干什么取决于他们生活在贫穷还是富有状态下。他们的行动作为又影响贫富状态的变化,要不然,人类社会就不公平了。
2、类图
下图就是它的类图,你可以比较下策略模式来更好的理解下他们的不同。
3、代码实例
状态类
interface State {
public void saySomething(StateContext sc);
}
class Poor implements State {
@Override
public void saySomething(StateContext sc) {
// TODO Auto-generated method stub
System.out.println("我没钱,我努力赚钱!");
sc.changeState(new Rich());
}
}
class Rich implements State {
@Override
public void saySomething(StateContext sc) {
// TODO Auto-generated method stub
System.out.println("我有钱,我挥霍!");
sc.changeState(new Poor());
}
}
状态上下文类
class StateContext {
private State currentState;
public StateContext() {
currentState = new Poor();
}
public void changeState(State newState) {
currentState = newState;
}
public void saySomething() {
this.currentState.saySomething(this);
}
}
主程序入口,测试下
public class Main {
public static void main(String[] args) {
StateContext sc = new StateContext();
sc.saySomething();
sc.saySomething();
sc.saySomething();
sc.saySomething();
}
}
结果:
我没钱,我努力赚钱!
我有钱,我挥霍!
我没钱,我努力赚钱!
我有钱,我挥霍!
我有钱,我挥霍!
我没钱,我努力赚钱!
我有钱,我挥霍!