- State 抽象状态角色
- 依赖环境角色 context
- handler,handler2 ... hanlerN 多个状态的业务逻辑
- ConcreteState 具体状态角色,一个类对应一种状态
- 针对每个状态下,自己的业务逻辑handler
- 其他的handler方法,先context.setCurrentState切换状态,再调用context.handlerN方法
- Context 环境角色
- 多个 new ConcreteState 属性
- currentState 当前状态属性
- setCurrentState(currentState) : 更新currentState属性,更新currentState的context属性
- 对应抽象状态的多个handler方法,委托给currentState对应的handler执行
context = new Context();
context.setCurrentState(new ConcreteState1()); // 初始化状态1
context.handle1(); // 直接调用ConcreteState1.handler1()
context.handle2(); // 切换到ConcreteState2,调用handler2()。隐藏了状态的变化
总结
优点
- 避免了过多的条件判断,不过相应地状态子类数量会增加
- 状态修改只需要修改对应的状态实现子类,增加状态只要增加子类。
- 封装了状态的变化过程
网友评论