当前位置: 首页 > news >正文

设计模式——状态模式介绍

状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。

状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。

下面是一个例子来说明状态模式的应用:

// 抽象状态类
interface State {void handle(Context context);
}// 具体状态类1
class ConcreteState1 implements State {public void handle(Context context) {System.out.println("当前状态是状态1");context.setState(new ConcreteState2()); // 设置下一个状态}
}// 具体状态类2
class ConcreteState2 implements State {public void handle(Context context) {System.out.println("当前状态是状态2");context.setState(new ConcreteState1()); // 设置下一个状态}
}// 上下文类
class Context {private State state;public Context(State state) {this.state = state;}public void setState(State state) {this.state = state;}public void request() {state.handle(this);}
}// 客户端代码
public class Main {public static void main(String[] args) {// 创建初始状态State initialState = new ConcreteState1();Context context = new Context(initialState);// 发起请求context.request(); // 打印"当前状态是状态1"context.request(); // 打印"当前状态是状态2"context.request(); // 打印"当前状态是状态1"}
}

在上述示例中,状态模式被用于管理上下文(Context)对象的不同状态。每个具体状态(Concrete State)都实现了状态(State)接口,并根据需要进行状态转换。上下文类(Context)通过委托给当前状态对象来处理请求,并可以在运行时更改状态。

通过状态模式,客户端代码可以与上下文对象进行交互,而不需要直接处理复杂的状态逻辑。这对于需要根据状态改变行为的场景非常有用,例如自动售货机中的不同状态(待机、售货、缺货等)的管理。

http://www.lryc.cn/news/241660.html

相关文章:

  • Java 多线程之 CAS(Compare and Set),实现无锁优化,自旋锁/乐观锁
  • python之pyqt专栏1-环境搭建
  • Spring Cloud LoadBalancer 简单介绍与实战
  • 私域流量解决方案分享
  • Scala---WordCount
  • GTC2023全球流量大会蓄势待发,菊风在7B57展位等你!
  • 喜讯!云起无垠成为国家信息安全漏洞库(CNNVD)技术支撑单位
  • cc linux用root用户执行chmod 777 -R ./提示 Operation not permitted怎么办?
  • scrapy框架流程
  • 802.11 帧的Reason Code 位和Status Code 位
  • 骨传导能保护听力吗?为什么说骨传导耳机可以保护听力?
  • 【iOS】实现评论区展开效果
  • POE交换机——电源解决方案-升压控制器\降压控制器\中高压降压转换器
  • [C/C++]数据结构 循环队列
  • Cache学习(2):Cache结构 命中与缺失 多级Cache结构 直接映射缓存
  • vue前端前端页面权限验证方式
  • jenkins springCloud项目优雅下线
  • indexOf
  • STM32分区跳转问题
  • 亿级流量架构服务降级
  • 【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能
  • 关于vs code Debug调试时候出现“找不到任务C/C++: g++.exe build active file” 解决方法
  • 交叉导轨在光学工作台起什么重要作用?
  • 易点易动固定资产管理系统:实现固定资产与财务系统的高效对接
  • 做亚马逊多久可以赚钱?做亚马逊需要多少资金?——站斧浏览器
  • 计算机应用基础_错题集_基础知识---网络教育统考工作笔记006
  • C#面试题3
  • MariaDB(基础信息)
  • SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!
  • Redis中文结果查看方式