Java学设计模式之状态模式

一、状态模式概念

1.1 什么是状态模式

状态模式是一种行为型设计模式,用于通过将对象的状态抽象为独立的状态类,使得对象在不同状态下能够有不同的行为。它允许对象在其内部状态发生改变时改变其行为,而不必改变其类。

结构

状态模式通常包含以下几个要素:

  1. Context(环境): 定义了客户端感兴趣的接口,并且维护一个当前状态对象的引用。

  2. State(状态): 定义了一个接口或抽象类,用于封装与Context的一个特定状态相关的行为。

  3. ConcreteState(具体状态): 实现了State接口或继承了State抽象类,定义了在某个特定状态下对象的行为。

二、状态模式代码

2.1 状态

public interface PlayerState {
    void play();
}

2.2 具体状态

public class NormalState implements PlayerState {
    @Override
    public void play() {
        System.out.println("玩家正常状态,可以自由行动");
    }
}
public class InjuredState implements PlayerState {
    @Override
    public void play() {
        System.out.println("玩家受伤状态,行动受限");
    }
}
public class DeadState implements PlayerState {
    @Override
    public void play() {
        System.out.println("玩家已死亡,无法行动");
    }
}

2.3 环境

public class Player {
    private PlayerState state;

    public void setState(PlayerState state) {
        this.state = state;
    }

    public void play() {
        state.play();
    }
}

2.4 测试类

public class StatePatternTest {
    public static void main(String[] args) {
        Player player = new Player();

        // 初始状态为正常
        player.setState(new NormalState());
        player.play();

        // 状态变为受伤
        player.setState(new InjuredState());
        player.play();

        // 状态变为死亡
        player.setState(new DeadState());
        player.play();

        // 输出:
        // 玩家正常状态,可以自由行动
        // 玩家受伤状态,行动受限
        // 玩家已死亡,无法行动
    }
}

三、总结

状态模式的优点包括:

  • 将状态转换逻辑集中到一个地方,使得状态变化更加清晰可控。
  • 将状态行为分散到不同的状态类中,符合单一职责原则,易于扩展和维护。

缺点包括:

  • 当状态过多时,会导致类的数量增加,使得代码变得复杂。
  • 如果状态之间有复杂的依赖关系,可能会导致逻辑混乱,不易维护。
posted @ 2024-05-10 10:02  启航黑珍珠号  阅读(60)  评论(0)    收藏  举报