宝子们,今天来唠唠 Java 里超好用的状态模式,学会它,代码就像德芙巧克力般丝滑,纵享编程新丝滑~
啥是状态模式?
咱就说,你家智能灯有 “开”“关”“调光” 这些状态,每个状态下按开关的反应不一样。在代码里,这就是状态模式!把对象的状态封装成不同类,让它根据当前状态决定行为,避免一堆 if-else 把代码搞成 “盘丝洞”。
高阶玩法之状态切换
想象一个游戏角色,有 “站立”“奔跑”“攻击”“死亡” 等状态。从 “站立” 切到 “奔跑”,可能要加载奔跑动画、改变速度参数;“死亡” 状态下,啥操作都得禁止,还可能触发 “游戏结束” 逻辑。这就是状态模式高阶之处,状态间切换有复杂逻辑,它能完美驾驭,代码条理清晰,后续加个 “飞行” 状态也轻松拿捏。
代码示例走起
// 先定义状态接口
interface CharacterState {
void handleInput(Character character);
}
// 具体状态:站立
class StandingState implements CharacterState {
@Override
public void handleInput(Character character) {
if (character.isMoveKeyPressed()) {
character.setState(new RunningState());
System.out.println("角色开始奔跑");
} else if (character.isAttackKeyPressed()) {
character.setState(new AttackingState());
System.out.println("角色发动攻击");
}
}
}
// 角色类
class Character {
private CharacterState state;
private boolean moveKeyPressed;
private boolean attackKeyPressed;
public Character() {
state = new StandingState();
}
public void setState(CharacterState state) {
this.state = state;
}
public boolean isMoveKeyPressed() {
return moveKeyPressed;
}
public void setMoveKeyPressed(boolean moveKeyPressed) {
this.moveKeyPressed = moveKeyPressed;
}
public boolean isAttackKeyPressed() {
return attackKeyPressed;
}
public void setAttackKeyPressed(boolean attackKeyPressed) {
this.attackKeyPressed = attackKeyPressed;
}
public void handleInput() {
state.handleInput(this);
}
}
在这代码里,角色初始是 “站立” 态,按不同键,状态切换,行为跟着变。这只是简化版,实际开发中,每个状态类能复杂到让你头发 “打结”,但别怕,状态模式就是那把 “梳子”,把乱麻梳顺。宝子们,赶紧在项目里试试,让代码从 “车祸现场” 秒变 “模范样板间”,卷死同事就靠它!