每个状态下都能相互转换 采用状态模式 由Context环境类来负责对整个状态统一管理,具体的状态下根据不同的条件实现状态的转换
package state;
public class Client {
public static void main(String[] args) {
Context context=new Context();
String state = context.play(true);
System.out.println(state);
String state1= context.play(true);
System.out.println(state1);
String state2= context.play(true);
System.out.println(state2);
String state3= context.play(false);
System.out.println(state3);
String state4= context.play(false);
System.out.println(state4);
}
}
public class Context {
private State state;
public Context() {
this.state = new PrimaryState(this);
}
public void setState(State state) {
this.state = state;
}
public String play(Boolean b){
this.state.play(b);
return state.getName();
}
}
public abstract class State {
protected Context context;
public String name;
public abstract void play(Boolean b);
public String getName() {
return name;
}
}
public class PrimaryState extends State{
private String name;
int socre;
public PrimaryState(Context context) {
this.context = context;
socre=100;
name="初级";
}
@Override
public void play(Boolean b) {
//胜利
if (b){
socre=+100;
context.setState(new SecondaryState(context));
}
}
}
public class SecondaryState extends State{
public int socre;
public SecondaryState(Context context) {
this.context = context;
super.name="熟练";
}
@Override
public void play(Boolean b) {
//胜利
if (b){
socre=+100;
context.setState(new ProfessionalState(context));
}else {
socre-=100;
context.setState(new PrimaryState(context));
}
}
}
private int socre;
private String name;
public FinalState(Context context) {
this.context = context;
super.name ="骨灰级别";
}
@Override
public void play(Boolean b) {
if (!b){
context.setState(new ProfessionalState(context));
}
}
}