基本概念
对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为
使用场景
问题
如下图,业务需要对不同的条件做不同的处理,如果这个处理的逻辑比较繁琐或者是判断的条件比较多的话,全写在一个方法里明显不容易维护。
调整
将条件(状态)相关的逻辑抽离到具体的类里,如下图。
示例代码
public class StatePatternTest {
public static void main(String[] args) {
Context context = new Context();
context.setState("stateA");
context.operate();
context.setState("stateB");
context.operate();
}
}
class Context{
State state;
void setState(String condition){
if("stateA".equals(condition)){
this.state = new StateA();
return;
}
if("stateB".equals(condition)){
this.state = new StateB();
return;
}
this.state = null;
}
void operate(){
if(this.state!=null){
this.state.operate();
}
}
}
interface State{
void operate();
}
class StateA implements State{
@Override
public void operate() {
System.out.println("state A...");
}
}
class StateB implements State{
@Override
public void operate() {
System.out.println("state B...");
}
}