• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

RomanLin

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

【设计模式与体系结构】行为型模式-状态模式

简介

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为。

状态模式的角色

环境(Context)类:定义用户所处的环境,并且维护一个状态对象,表示当前所处环境的状态
抽象状态(State)类:定义一个接口,封装与环境相关的一个特定状态的行为
具体状态(Concrete State)类:实现抽象状态接口,每个具体状态类都实现了环境的一个特定状态相关的行为

状态模式的优点

  1. 将行为与状态解耦:将行为和状态封装到不同的类中,耦合性低,代码结构清晰,易于维护与扩展
  2. 符合开闭原则:当需要新增新的状态类和行为时,只需要创建新的具体状态类,而不需要修改环境类已有的代码

状态模式的缺点

  1. 增加系统复杂性:每增加一个具体状态,都需要增加一个具体状态类
  2. 状态转换逻辑复杂:如果状态之间的转换比较复杂,则会使得系统管理难度较大

状态模式的使用场景

  1. 对象的行为依赖于它的状态:例如游戏中的角色处于受伤、正常或死亡等状态下,行为有所不同
  2. 状态转换频繁:当对象的状态经常发生变化,且状态转换的逻辑较为复杂时,使用状态模式可以简化代码的管理

正文

定义一个抽象状态接口 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();
	}
}

posted on 2025-02-09 13:15  RomanLin  阅读(42)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3