【设计模式与体系结构】行为型模式-状态模式
简介
状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为。
状态模式的角色
环境(Context)类:定义用户所处的环境,并且维护一个状态对象,表示当前所处环境的状态
抽象状态(State)类:定义一个接口,封装与环境相关的一个特定状态的行为
具体状态(Concrete State)类:实现抽象状态接口,每个具体状态类都实现了环境的一个特定状态相关的行为
状态模式的优点
- 将行为与状态解耦:将行为和状态封装到不同的类中,耦合性低,代码结构清晰,易于维护与扩展
- 符合开闭原则:当需要新增新的状态类和行为时,只需要创建新的具体状态类,而不需要修改环境类已有的代码
状态模式的缺点
- 增加系统复杂性:每增加一个具体状态,都需要增加一个具体状态类
- 状态转换逻辑复杂:如果状态之间的转换比较复杂,则会使得系统管理难度较大
状态模式的使用场景
- 对象的行为依赖于它的状态:例如游戏中的角色处于受伤、正常或死亡等状态下,行为有所不同
- 状态转换频繁:当对象的状态经常发生变化,且状态转换的逻辑较为复杂时,使用状态模式可以简化代码的管理
正文
定义一个抽象状态接口 State.java
public interface State { void handle();//状态对于的行为 }
定义正常状态类 NormalState.java
public class NormalState implements State { @Override public void handle() { System.out.println("状态正常,无事发生"); } }
定义受伤状态类 PainState.java
public class PainState implements State { @Override public void handle() { System.out.println("受伤状态,持续扣血"); } }
定义死亡状态类 DeadState.java
public class DeadState implements State { @Override public void handle() { System.out.println("已经死亡,血条已光"); } }
定义一个环境类 Context.java
public class Context { private State state; public Context() { } public Context(State state) { this.state = state; } public State getState() { return state; } public void setState(State state) { this.state = state; } public void request() { state.handle(); } }
定义一个客户端 Client.java
public class Client { public static void main(String[] args) { Context context = new Context(new NormalState()); context.request(); context.setState(new PainState()); context.request(); context.setState(new DeadState()); context.request(); } }
合集:
行为型模式
分类:
设计模式与体系结构 / 设计模式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee