关于java:状态模式

45次阅读

共计 1128 个字符,预计需要花费 3 分钟才能阅读完成。

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

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

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

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

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

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

上下文类

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…

正文完
 0