状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。
结构:Context环境类 :环境类中维护一个State对象,它定义了当前的状态 。
State:状态接口
ConcreteState: 具体的状态类,封装了每一个具体类的对应行为。
应用场景:
线程对象各个状态的切换
店房间状态的管理
账号的状态管理
看一个简单的Demo:
public interface State {
void handle();
}
class Booked implements State {
@Override
public void handle() {
System.out.println("您已下单!");
}
}
class Payed implements State {
@Override
public void handle() {
System.out.println("您已付款!");
}
}
class Sended implements State {
@Override
public void handle() {
System.out.println("已发货!");
}
}
class InWay implements State {
@Override
public void handle() {
System.out.println("送货中。。。");
}
}
class Recieved implements State {
@Override
public void handle() {
System.out.println("已确认收货!");
}
}
public class Context {
private State state;
public Context() {}
public Context(State state) {
this.state = state;
}
public void setState(State state) {
System.out.println("订单信息已更新!");
this.state = state;
this.state.handle();
}
}
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.setState(new Booked());
context.setState(new Payed());
context.setState(new Sended());
context.setState(new InWay());
context.setState(new Recieved());
}
}
运行结果:
订单信息已更新!
您已下单!
订单信息已更新!
您已付款!
订单信息已更新!
已发货!
订单信息已更新!
送货中。。。
订单信息已更新!
已确认收货!