简介
状态模式是行为型模式的一种,在状态模式中,一个类的行为会随着其状态改变而改变。在实现过程中,通常会有一个Context类用来承载当前的状态,其会随着状态的改变而改变。在日常生活中,我们的篮球运动员会有进攻和防守两种状态,接下来以此为Demo进行实现:
Demo示例
1.定义运动员的状态接口,然后进攻状态和防守状态两种状态来实现:
public interface PlayerState {
void doAction(PlayerContext context);
}
public class AttackState implements PlayerState{
@Override
public void doAction(PlayerContext context) {
context.setState(this);
System.out.println("Player in attack state");
}
@Override
public String toString() {
return "attack state";
}
}
public class DefendStates implements PlayerState{
@Override
public void doAction(PlayerContext context) {
context.setState(this);
System.out.println("player in defend state");
}
@Override
public String toString() {
return "defend state";
}
}
2.定义承载状态的上下文
public class PlayerContext {
private PlayerState state;
public void setState(PlayerState state) {
this.state = state;
}
public PlayerState getState() {
return state;
}
}
3.客户端调用
public class Test {
public static void main(String[] args) {
PlayerContext context = new PlayerContext();
PlayerState attackState = new AttackState();
attackState.doAction(context);
System.out.println(context.getState());
PlayerState defendState = new DefendStates();
defendState.doAction(context);
System.out.println(context.getState());
}
}