js状态模式

devtools/2025/1/11 10:35:19/

允许一个对象在其内部状态改变时改变它的行为。
状态模式将对象的状态封装成独立的类,并使它们可以互相转换
在这里插入图片描述

 // 定义状态接口class State {constructor() {if (this.constructor === State) {throw new Error('不能实例化抽象类');}}// 定义状态方法handle(context) {throw new Error('必须实现 handle 方法');}}// 具体状态类 Aclass ConcreteStateA extends State {constructor() {super();}// 实现状态方法handle(context) {console.log('执行具体状态 A 的方法');context.setState(new ConcreteStateB());}}// 具体状态类 Bclass ConcreteStateB extends State {constructor() {super();}// 实现状态方法handle(context) {console.log('执行具体状态 B 的方法');context.setState(new ConcreteStateA());}}// 上下文类class Context {constructor() {this.state = new ConcreteStateA();}// 设置状态方法setState(state) {this.state = state;}// 执行状态方法request() {this.state.handle(this);}}// 使用状态模式let context = new Context();context.request();context.request();context.request();
class CoffeeMaker {constructor() {/**这里略去咖啡机中与咖啡状态切换无关的一些初始化逻辑**/// 初始化状态,没有切换任何咖啡模式this.state = 'init';// 初始化牛奶的存储量this.leftMilk = '500ml';}//将状态作为属性放进去stateToProcessor = {that: this,american() {// 尝试在行为函数里拿到咖啡机实例的信息并输出console.log('咖啡机现在的牛奶存储量是:', this.that.leftMilk)console.log('我只吐黑咖啡');},latte() {this.american()console.log('加点奶');},vanillaLatte() {this.latte();console.log('再加香草糖浆');},mocha() {this.latte();console.log('再加巧克力');}}// 关注咖啡机状态切换函数changeState(state) {this.state = state;if (!this.stateToProcessor[state]) {return;}this.stateToProcessor[state]();}}const mk = new CoffeeMaker();mk.changeState('latte');

http://www.ppmy.cn/devtools/149588.html

相关文章

OceanBase4.0 跟我学--分布式到底可靠不可靠,到底丢不丢数--终于学完了

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2680人左右 1 …

在 Ubuntu 上对 Nginx 进行源码编译的详细指南

要在 Ubuntu 上对 Nginx 进行源码编译并包含 TCP 负载均衡模块(即 Stream 模块),请按照以下步骤操作: 1. 安装编译所需的依赖 首先,确保系统的软件包列表是最新的,并安装编译 Nginx 所需的基本工具和库&a…

PDF如何提取文字?OCR技术快速识别提取PDF中的文字内容!这种简单方法一定要知道!

在日常工作中,我们常常会遇到PDF文档和图纸中的文字无法直接复制粘贴的问题,尤其是那些文字呈现为打散线条或扫描图片形式的文件,给我们的工作带来诸多不便。不过别担心,PDF快速看图软件的“提取文字”功能(基于OCR技术…

Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求

一、前言说明 这几个功能是近期定制的功能,也非常具有代表性,核心就是之前登录和设备信息都是在本地,存放在数据库中,数据库可以是本地或者远程的,现在需要改成通过网络API请求的方式,现在很多的服务器很强…

上手体验微软全新整合的王炸平台Fabric

体验确实不错,微软强大的生态能力。 把可视化,数仓,数据胡,数据工厂,机器学习,数据监控等技术都整合到一个平台了。所有数据全都存储在统一的one lake数据中心,消除数据孤岛问题。而且不同角色可…

vue的KeepAlive应用(针对全部页面及单一页面进行缓存)

KeepAlive的作用是缓存包裹在其中的动态切换组件 当一个组件在 中被切换时,它的 activated 和 deactivated 生命周期钩子将被调用,用来替代 mounted 和 unmounted。这适用于 的直接子节点及其所有子孙节点。 缓存全部页面 将app.vue中的路由出口改为&am…

稀土化合物:引领科技创新,推动绿色发展

一、稀土化合物的基本概念 稀土化合物是指由稀土元素与其他元素形成的化学化合物。稀土元素包括镧系元素和铕、铽、镱、钇等,具有独特的物理、化学性质,这些元素在现代工业、科技和环保领域中扮演着至关重要的角色。稀土化合物具有非常丰富的光、电、磁…

Spring Boot开发——结合Redis实现接口防止重复提交

文章目录 一、准备工作1、引入依赖2、配置Redis 二、实现代码1、创建Redis服务类2、创建AOP切面类3、自定义注解4、处理异常5、使用注解 三、测试验证1、启动Redis服务2、启动Spring Boot应用3、模拟重复提交 在Web开发中,防止用户重复提交表单是一个常见的需求。例…