《吃透 Java 状态模式:代码从此 “丝滑” 起来》

63 阅读2分钟

宝子们,今天来唠唠 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);
    }
}

在这代码里,角色初始是 “站立” 态,按不同键,状态切换,行为跟着变。这只是简化版,实际开发中,每个状态类能复杂到让你头发 “打结”,但别怕,状态模式就是那把 “梳子”,把乱麻梳顺。宝子们,赶紧在项目里试试,让代码从 “车祸现场” 秒变 “模范样板间”,卷死同事就靠它!