学过编译原理应该知道有限状态机,状态模式就是适用于那种希望 一个对象在不同状态下呈现不一样的行为的一种design pattern。
我们以一个实例来诠释,有一个Door对象,Door对象有两个状态:OpenState,ClosedState,当我们提交一个请求的时候,它若在OpenState状态,希望它能执行关闭操作,它若在ClosedState状态,希望它能执行打开操作。
官方类图:
State:
public abstract class State { public abstract void handle(Door door); }OpenState:
public class OpenState extends State{ @Override public void handle(Door door) { System.out.println("the door has closed"); door.changeState(new ClosedState()); } }ClosedState:
public class ClosedState extends State { @Override public void handle(Door door) { System.out.println("the door has opened"); door.changeState(new OpenState()); } }Door:
public class Door { State state; public Door(State state){ this.state=state; } public void request() { state.handle(this); } protected void changeState(State state) { this.state=state; } }Client:
public class Client { public static void main(String[] args){ Door door =new Door(new OpenState()); door.request(); door.request(); door.request(); } }输出为: the door has closed the door has opened the door has closed