java 设计模式之State(状态模式)

发布时间 - 2026-01-11 03:00:56    点击率:

java 设计模式之State(状态模式)

在状态模式中,一个类的行为基于它的状态的改变而改变。状态模式归属于行为型模式。

在下面的实例中,我们创建了一个接口State,定义了一个操作方法,两个实现类StartState和StopState。另外,创建了一个上下文类Context,这个类关联到State类。UML类图如下所示:

//状态类 
public interface State { 
  public void doAction(Context context); 
} 
//实现类StartState.java 
public class StartState implements State { 
  public void doAction(Context context) { 
   System.out.println("Player is in start state"); 
   context.setState(this);  
  } 
  public String toString(){ 
   return "Start State"; 
  } 
} 
//实现StopState.java 
public class StopState implements State { 
  public void doAction(Context context) { 
   System.out.println("Player is in stop state"); 
   context.setState(this);  
  } 
  public String toString(){ 
   return "Stop State"; 
  } 
} 
 
//上下文Context.java 实际运用时可自行更改 
public class Context { 
  private State state; 
  public Context(){ 
   state = null; 
  } 
  public void setState(State state){ 
   this.state = state;         
  } 
  public State getState(){ 
   return state; 
  } 
} 
 
//测试类 
public class StatePatternDemo { 
  public static void main(String[] args) { 
   Context context = new Context(); 
   StartState startState = new StartState(); 
   startState.doAction(context); 
   System.out.println(context.getState().toString()); 
  
   StopState stopState = new StopState(); 
   stopState.doAction(context); 
  
   System.out.println(context.getState().toString()); 
  } 
} 

输出结果

Player is in start state

Start State

Player is in stop state

Stop State

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 设计模式之State  # State状态设计模式  # Java设计模式之状态模式State Pattern详解  # Java设计模式之状态模式  # 深入理解Java设计模式之状态模式  # Java设计模式之java状态模式详解  # 详解JAVA 设计模式之状态模式  # 对比Java设计模式编程中的状态模式和策略模式  # Java设计模式之状态模式(State模式)介绍  # Java状态设计模式实现对象状态转换的优雅方式  # 如有  # 希望能  # 所示  # 谢谢大家  # 操作方法  # 疑问请  # interface  # public  # brush  # void  # context  # implements  # doAction  # System  # class  # State  # StartState  # strong  # UML 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  郑州企业网站制作公司,郑州招聘网站有哪些?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel如何与Inertia.js和Vue/React构建现代单页应用  中国移动官方网站首页入口 中国移动官网网页登录  如何在万网自助建站中设置域名及备案?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何基于PHP生成高效IDC网络公司建站源码?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  详解CentOS6.5 安装 MySQL5.1.71的方法  如何快速生成高效建站系统源代码?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何快速重置建站主机并恢复默认配置?  详解jQuery中基本的动画方法  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel Fortify是什么,和Jetstream有什么关系  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何在VPS电脑上快速搭建网站?  Python数据仓库与ETL构建实战_Airflow调度流程详解  微信小程序 五星评分(包括半颗星评分)实例代码  JavaScript如何实现类型判断_typeof和instanceof有什么区别  php打包exe后无法访问网络共享_共享权限设置方法【教程】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  油猴 教程,油猴搜脚本为什么会网页无法显示?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  香港服务器租用每月最低只需15元?  手机网站制作与建设方案,手机网站如何建设?  Linux系统命令中tree命令详解  JS经典正则表达式笔试题汇总  南京网站制作费用,南京远驱官方网站?  如何在万网ECS上快速搭建专属网站?  如何用已有域名快速搭建网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Java垃圾回收器的方法和原理总结