设计模式-状态模式:让对象的行为随状态改变而清晰可控
🌟 引言
场景痛点:
你是否遇到过这样的代码?
if (state == "待支付") {
// 处理待支付逻辑
} else if (state == "已支付") {
// 处理已支付逻辑
} else if (...) {
// 无限的条件分支...
}
条件分支爆炸导致代码臃肿、难以维护?状态模式正是解决这类问题的利器!
本文亮点:
- 3个真实代码示例
- 角色结构图 + 对比表格
- JDK源码应用分析
一、状态模式是什么?
1.1 概念
状态模式(State Pattern) 是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。状态模式将对象的行为封装到不同的状态类中,使得对象在不同状态下有不同的行为表现。
简单来说,状态模式的核心思想是:将状态与行为分离,让对象的行为随着状态的改变而自动改变,而不是通过大量的条件判断来实现。
核心思想:
- 状态与行为解耦:将每个状态的行为封装到独立类中。
- 消除条件分支:通过多态实现状态切换,避免if-else嵌套。
1.2 举个栗子 🌰
想象一个自动售货机:
- 状态:待投币 → 已投币 → 售出 → 缺货
- 行为:投币、退币、出货在不同状态下表现不同。
用状态模式实现,代码将清晰如丝滑!
🔧 二、状态模式原理与结构
2.1 结构图
+-------------------+ +-------------------+
| Context | | State |
|-------------------| |-------------------|
| - state: State |<-------| + handle(): void |
| + setState(State) | +-------------------+
| + request() | ^
+-------------------+ |
|
+-----------------------------------+
| |
+-------------------+ +-------------------+
| ConcreteStateA | | ConcreteStateB |