简介:在状态模式中,类的行为是基于它的状态改变的,类的状态改变,该类的行为也会随着状态改变而改变。这种类型的设计模式属于行为型模式。
适用场景:①行为随状态的改变而改变;②可以作为if else 判断语句或者switch语句的代替者,状态模式中每个条件分支对应一个类。
/**
*创建一个状态的接口
*/
public interface State {
String getState();
}
/**
*上班状态
*/
class StartWork implements State{
@Override
public String getState() {
// TODO Auto-generated method stub
return "开始上班";
}
}
/**
*下班状态
*/
class GoOffWork implements State{
@Override
public String getState() {
// TODO Auto-generated method stub
return "下班";
}
}
/**
*休息状态
*/
class Rest implements State{
@Override
public String getState() {
// TODO Auto-generated method stub
return "休息";
}
}
/**
* 随着状态对象改变而改变的 context类
*/
class Context{
private State state;
public State getState() {
return state;
}
//状态改变时,对应的行为也进行改变。
public void setState(State state) {
this.state = state;
doAction();
}
public Context(State state) {
super();
this.state = state;
}
public void doAction(){
System.err.println("状态是:"+state.getState());
}
}
主方法:
public class Main {
public static void main(String[] args) {
State state=new GoOffWork();
Context context=new Context(state);
//下班状态
context.doAction();
//休息状态
context.setState(new Rest());
//上班状态
context.setState(new StartWork());
}
}
运行结果:
状态是:下班
状态是:休息
状态是:开始上班
参考文章:
Java设计模式系列之状态模式