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();
// 输出:
// 玩家正常状态,可以自由行动
// 玩家受伤状态,行动受限
// 玩家已死亡,无法行动
}
}

三、总结

状态模式的优点包括:

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

缺点包括:

  • 当状态过多时,会导致类的数量增加,使得代码变得复杂。
  • 如果状态之间有复杂的依赖关系,可能会导致逻辑混乱,不易维护。

本文作者:启航黑珍珠号

本文链接:https://www.cnblogs.com/Linzj5950/p/18183661

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   启航黑珍珠号  阅读(46)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起