状态模式state
场景:当具有许多状态并且需要频繁改变时,用这种模式
-电梯的运行:维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态
-红绿灯:红灯,黄灯,绿灯
-企业或政府系统:公文的审批状态
-网上购物时,订单的状态:下单,已付款,送货中,已收货
核心:用于解决系统中复杂对象的状态转换及不同状态下行为的封装问题
结构:Context环境类上下文(维护一个State对象,定义了当前的状态),State抽象状态类,ConcreteState具体状态类(每一个类封装了一个状态对应的行为)
开发中常见场景:
-银行系统中账号状态的管理
-OA系统中公文状态的管理
-酒店系统中,房间状态的管理
-线程对象各状态之间的切换
例子:酒店房间不同状态
状态图
public interface State {
void handler();
}
class FreeState implements State{
@Override
public void handler() {
System.out.println("空闲房间,可入住");
}
}
class Booked implements State{
@Override
public void handler() {
System.out.println("已预定");
}
}
class Checked implements State{
@Override
public void handler() {
System.out.println("已入住");
}
}
/**
* 上下文类
* 房间
* @author 小帆敲代码
*
*/
public class RoomContext {
private State state;
public void setState(State s) {
state=s;
System.out.println("修改状态!");
state.handler();
}
}
RoomContext rc=new RoomContext();
rc.setState(new FreeState());
rc.setState(new Booked());
}
![](https://img2018.cnblogs.com/blog/1740093/201908/1740093-20190816202006143-1439166055.jpg)