状态模式的定义是容许对象通过扭转其状态的形式扭转它的行为。

状态模式中有以下几种角色

  • 上下文类:用于记录状态、批改状态,行为的调用等

形象状态类:所有用于示意同一类状态的类的父类,并定义了一个行为接口

具体状态类:不同状态的具体实现

上面是应用状态模式对一个打印机行为的一种实现。

上下文类

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...