21、状态模式(State Pattern)

状态模式指给对象定义不同的状态,并为不同的状态定义不同的行为,在对象的状态发生变换时自动切换状态的行为。

状态模式是一种对象行为型模式,它将对象的不同行为封装到不同的状态中,遵循了“单一职责”原则。同时,状态模式基于对象的状态将对象行为进行了明确的界定,减少了对象行为之间的相互依赖,方便系统的扩展和维护。

简单理解,一个拥有状态的 Context 对象,在不同的状态下,其行为会发生改变。比如,工作状态和休假状态等。具体的角色如下:

  • 环境(Context):也叫上下文,用于维护对象当前的状态,并在对象状态发生变化时触发对象行为的变化。
  • 抽象状态(Abstract State):定义了一个接口,用于定义对象中不同状态所对应的行为。
  • 具体状态(Concrete State):实现抽象状态所定义的行为。

1)AbstractState 抽象类:

public abstract class AbstractState {public abstract void action(Context context);
}

 2)AbstractState 的子类 HolidayState:

@Slf4j
public class HolidayState extends AbstractState {@Overridepublic void action(Context context) {log.info("state change to holiday state ...");log.info("holiday state actions is travel, shopping, watch TV ...");}
}

3)AbstractState 的子类 WorkState:

@Slf4j
public class WorkState extends AbstractState {@Overridepublic void action(Context context) {log.info("state change to work state ...");log.info("work state actions is meeting, design, coding ...");}
}

4)Context 用于存储状态和执行不同状态下的行为:

public class Context {private AbstractState state;public Context(AbstractState state) {this.state = state;}public AbstractState getState() {return state;}public void setState(AbstractState state) {this.state = state;}public void action() {this.state.action(this);}
}

5)测试状态模式:

package cn.jaa.state_pattern;/*** @Author: Jaa* @Description:* @Date 2023/12/14*/
public class StateDemoTest {public static void main(String[] args) {Context context = new Context(new WorkState());context.action();context.setState(new HolidayState());context.action();}
}

打印结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB 2018一本通 学习笔记一

vivado暂时可以收一下,而且今天看场景和问题的解决程度,这两天看的还是有效果,需要接下来弄一下matlab。 算法开发、数据可视化、数据分析、数值计算方面,之前搞Python弄过matlib库,觉得差不多,但是实际工…

【动手学深度学习】(十三)深度学习硬件

文章目录 一、CPU和GPU二、更多的芯片1.DSP:数字信号处理2.可编程阵列(FPGA)3.AI ASIC 三、单机多卡并行 一、CPU和GPU 提升CPU利用率 在计算ab之前,需要准备数据 主内存->L3->L2->L1->寄存器(数据只有进入寄存器才可以参与运算) 提升空间和时间的内存…

【react.js + hooks】useVirtualArea 渲染虚拟列表

useVirtualArea Hook useVirtualArea 是一个 React Hook,用于创建虚拟列表。虚拟列表是一种优化技术,用于在不影响性能的情况下显示大量数据。 参数 useVirtualArea 接受一个对象和一个数组作为参数,该对象包含以下属性: load…

Android : Room 数据库的基本用法 —简单应用_三_版本

在实体类中添加了新字段: Entity(tableName "people") public class People {//新添加的字段private String email;public String getEmail() {return email;}public void setEmail(String email) {this.email email;}} 再次编译启动时会报错&#xf…

电子元器件介绍——电阻(一)

电子元器件 文章目录 电子元器件前言1.1电阻基本知识1.2电阻的作用1.3电阻的分类1.4 贴片电阻贴片电阻的规范、尺寸、封装 1.5 技术参数噪声: 1.6 电阻的失效 总结 前言 接下来我们就把常用的电子元器件全部介绍给大家,这一节是电阻,电容电感…

基础算法(2):排序(2):计数排序

1.计数排序实现 计数排序是一个非基于比较的稳定的线性时间的排序算法,而选择排序是基于比较的,计数排序不用,它的实现依靠计数。 工作原理:使用一个额外的数组,其中第i个位置是待排序数组1中值等于i的元素的个数&…

蓝桥杯物联网竞赛_STM32L071_9_按键矩阵扩展模块

原理图: 矩阵按键原理图: 实验板接口原理图: 得到对应图: 扫描按键原理: 按键的COLUMN1、2、3分别制0,每次只允许其中一个为0其他都是1(POW1和POW2正常状况为上拉),当有…

软件设计中如何画各类图之七了解组件图:系统架构的关键视角

目录 1 前言2 组件图基本介绍3 画组件图的步骤4 组件图的用途5 场景及实际场景举例6 结语 1 前言 组件图是一种UML的图形化表示工具,为系统架构提供了重要视角。它描述了系统中各个组件以及它们之间的依赖关系和连接。用于展示系统中的组件、软件模块、以及它们之间…

平头哥玄铁系列 RISC-V 芯片及开发板

1、玄铁 9 系列概述 玄铁 8 系列 基于C-SKY架构,玄铁 9 系列基于 RISC-V 架构。E 系列为 RISC-V 32 位,C 系列为 RISC-V 64 位。 E902:超低功耗 RSIC-V 架构处理器 E902 采用 2 级极简流水线兼容 RISC-V 架构且对执行效率等方面进行了增强&a…

linux-tar命令、解压、压缩

压缩 文件夹 命令:tar -zcvf ~/test/tar_t.tar.gz /target/ 将/target/文件夹及其子文件夹和文件压缩成tar_t.tar.gz文件,并放于~/test/路径下 文件 命令:tar -zcvf ~/test/tar_t.tar.gz /target/file 将/target/file文件压缩成tar_t.tar…

linux中文件服务器NFS和FTP服务

文件服务器 NFSNFS介绍配置nfs文件共享服务端客户端 FTPftp介绍FTP基础ftp主动模式ftp被动模式 Vsftp 服务器简介vsftpd配置安装vsftpd[ftp的服务端]编辑配置文件匿名用户设置创建本地用户使用ftp服务 客户端操作匿名用户登录本地用户登录lftp服务 NFS NFS介绍 文件系统级别共…

对于初学者来说,从哪些方面开始学习 Java 编程比较好?

对于初学者来说,从哪些方面开始学习 Java 编程比较好? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「Java的资料从专业入门到高级教程工具包」,点个关注,全…

玩转大数据14:分布式计算框架的选择与比较

1. 引言 随着大数据时代的到来,越来越多的企业和组织需要处理海量数据。分布式计算框架提供了一种有效的方式来解决大数据处理的问题。分布式计算框架将计算任务分解成多个子任务,并在多个节点上并行执行,从而提高计算效率。 2. 分布式计算…

IDEA卡顿,进行性能优化设置(亲测有效)——情况一

需求场景 IDEA重新激活后,运行IDEA卡的非常卡顿,没有运行项目,CPU占比也非常高: 原因分析 可能的原因是,在IDEA的配置中,给他分配的空间比较小 解决方式 步骤一 选择顶部导航栏中的Help,然后点击Edi…

Webpack cl4 配置

基本配置: module.exports defineConfig({transpileDependencies: false,lintOnSave: false,outputDir: process.env.VUE_APP_DIST, // 打包后文件的目录publicPath: ./, // 静态资源路径(默认/,打包后会白屏)assetsDir: static…

在CentOS中安装docker

环境:CentOS 7 目的:安装docker、启动服务 依据: 🔗官方文档 一、前提 1、查看内核版本 uname -rTip:docker需要内核版本3.10以上。所以CentOS 7是最低要求 2、更新软件包 耗时较长 yum update -y3、安装yum…

spider小案例~https://industry.cfi.cn/BCA0A4127A4128A4141.html

一、获取列表页信息 通过抓包发现列表页信息非正常返回,列表信息如下图: 通过观察发现列表页信息是通过unes函数进行处理的,我们接下来去看下该函数 该函数是对列表页的信息先全局替换"~"为"%u",然后再通过…

快速碰撞刚性环境的机器人低阻抗控制(阻尼影响分析)

问题描述 在快速碰撞刚性环境的机器人低阻抗控制中,需要通过精确的碰撞检测和处理,以及低阻抗控制策略的优化,来减少碰撞对机器人和环境的影响。同时,我们还需要适应刚性环境,提高机器人的稳定性和鲁棒性,…

MySQL数据库,视图、存储过程与存储函数

数据库对象: 常见的数据库对象: 视图: 视图是一种虚拟表,本身是不具有数据的占用很少的内存空间。 视图建立在已有表的基础上,视图赖以建立的这些表称为基表。 视图的创建和删除只影响视图本身,不影响对…

打造绿色计算数智动力 HashData 入选“绿色计算最具价值解决方案”

12月13日-14日,由绿色计算产业联盟(GCC)、边缘计算产业联盟(ECC)联合举办“2023计算产业生态大会”(CIEC 2023)在北京举行。作为计算领域的权威会议,本次大会邀请了多位两院院士、众多产业专家,…