状态模式的定义是容许对象通过扭转其状态的形式扭转它的行为。
状态模式中有以下几种角色
- 上下文类:用于记录状态、批改状态,行为的调用等
形象状态类:所有用于示意同一类状态的类的父类,并定义了一个行为接口
具体状态类:不同状态的具体实现
上面是应用状态模式对一个打印机行为的一种实现。
上下文类
public class PrinterContext { private PrinterState state; public PrinterContext(PrinterState state) { this.state = state; } public PrinterState getState() { return state; } public void setState(PrinterState state) { this.state = state; } public void handle(){ state.handle(this); }}
形象状态类
public interface PrinterState { void handle(PrinterContext context);}
具体状态类
public class OccupyState implements PrinterState { @Override public void handle(PrinterContext context) { System.out.println("打印机正在被占用...."); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }finally { System.out.println("打印完结,转为闲暇模式"); context.setState(new IdleState()); } }}
public class IdleState implements PrinterState { @Override public void handle(PrinterContext context) { System.out.println("打印机闲暇中....."); }}
测试类
public class StateTest { @Test public void test(){ PrinterState occupyState = new OccupyState(); PrinterContext context = new PrinterContext(occupyState); context.handle(); }}=====后果=====打印机正在被占用....打印完结,转为闲暇模式
状态模式和策略模式很像,用上面的两个时序图很容易看出两者的一些差别。
https://blog.csdn.net/ruangon...