Java学设计模式之状态模式
一、状态模式概念
1.1 什么是状态模式
状态模式是一种行为型设计模式,用于通过将对象的状态抽象为独立的状态类,使得对象在不同状态下能够有不同的行为。它允许对象在其内部状态发生改变时改变其行为,而不必改变其类。
结构
状态模式通常包含以下几个要素:
-
Context(环境): 定义了客户端感兴趣的接口,并且维护一个当前状态对象的引用。
-
State(状态): 定义了一个接口或抽象类,用于封装与Context的一个特定状态相关的行为。
-
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 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步