一、定义
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑用状态模式了。
二、UML类图
三、实现
- 抽象状态类
package com.jthao.design.des.states;
public abstract class State {
public abstract void handle(Context context);
}
- 具体状态实现类A
package com.jthao.design.des.states;
public class ConcreteStateA extends State {
@Override
public void handle(Context context) {
context.setState(new ConcreteStateB());
}
}
- 具体状态实现类B
package com.jthao.design.des.states;
public class ConcreteStateB extends State {
@Override
public void handle(Context context) {
context.setState(new ConcreteStateA());
}
}
- Context转发类
package com.jthao.design.des.states;
public class Context {
private State state;
public Context(State state) {
this.state = state;
}
public void request() {
state.handle(this);
}
public State getState() {
return state;
}
public void setState(State state) {
System.out.println(state.getClass().getName());
this.state = state;
}
}
- 测试类
package com.jthao.design.des.states;
public class Test {
public static void main(String[] args) {
Context context = new Context(new ConcreteStateA());
context.request();
context.request();
context.request();
context.request();
}
}