场景:
电梯的运行
- 维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态
红绿灯
- 红灯、黄灯、绿灯
企业或政府系统
- 公文的审批状态
报销单据审批状态
假条审批
网上购物时,订单的状态
- 下单
- 已付款
- 已发货
- 送货中
- 已收货
核心
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
结构
Context环境类
- 环境类中维护一个State对象,它是定义了当前的状态
State抽象状态类
ConcreteState具体状态类
- 每一个类封装了一个状态对应的行为
public class Context { private State state; public void setState(State state) { System.out.println("修改状态"); this.state = state; this.state.handle(); } } public interface State { void handle(); } public class BookState implements State{ @Override public void handle() { // TODO Auto-generated method stub System.out.println("房间已预订"); } } public class CheckedState implements State{ @Override public void handle() { // TODO Auto-generated method stub System.out.println("房间已入住"); } } public class FreeState implements State{ @Override public void handle() { // TODO Auto-generated method stub System.out.println("房间空闲,没人住"); } }
开发中常见的场景
- 银行系统中账号状态的管理
- OA系统中公文状态的管理
- 酒店系统中房间状态的管理
- 线程对象各状态之间的切换
时间: 2024-10-20 21:37:20