1、简述
状态模式是一种行为型设计模式,允许对象在其内部状态改变时改变其行为。它将状态相关的行为抽取到独立的状态类中,使得增加新状态变得简单,且不影响其他状态。
设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git
本文将详细介绍状态模式的概念、结构、优缺点,以及实际应用案例。
2、什么是状态模式?
状态模式通过将对象的行为与其内部状态解耦,来实现行为的动态切换。它通过引入一系列状态类,每个类封装一种状态下的行为。
典型应用场景包括:
- 文件下载状态管理(开始、暂停、完成)。
- 游戏角色状态(攻击、移动、防御)。
- 工作流管理(审批状态)。
状态模式包含以下角色:
- 上下文(Context):维护状态实例,定义客户端与状态的交互接口。
- 状态(State):定义状态的公共接口。
- 具体状态(ConcreteState):实现特定状态下的行为。
类图:
Context <--> State <--> ConcreteState
3、实际案例
假设我们需要管理订单的状态,包括:待支付、已支付、已完成。
// 状态接口
public interface OrderState {
void handleOrder();
}
// 具体状态类
public class PendingState implements OrderState {
@Override
public void handleOrder() {
System.out.println("订单状态:待支付。请完成支付!");
}
}
public class PaidState implements OrderState {
@Override
public void handleOrder() {
System.out.println("订单状态:已支付。订单处理中。");
}
}
public class CompletedState implements