写一个java状态模式的详细实例

以下是一个示例的 Java 状态模式实现:

java Copy code
// 定义状态接口
interface State {
    void handleState(Context context);
}

// 具体状态类 1
class ConcreteState1 implements State {
    public void handleState(Context context) {
        System.out.println("当前状态为状态 1");
        // 在状态 1 下执行相应的逻辑
    }
}

// 具体状态类 2
class ConcreteState2 implements State {
    public void handleState(Context context) {
        System.out.println("当前状态为状态 2");
        // 在状态 2 下执行相应的逻辑
    }
}

// 上下文类,用于维护当前状态并执行相应操作
class Context {
    private State currentState;

    public void setCurrentState(State state) {
        this.currentState = state;
    }

    public void request() {
        currentState.handleState(this);
    }
}

public class StatePatternExample {
    public static void main(String[] args) {
        Context context = new Context();

        // 设置初始状态为状态 1
        State state1 = new ConcreteState1();
        context.setCurrentState(state1);

        // 执行请求
        context.request();

        // 切换到状态 2
        State state2 = new ConcreteState2();
        context.setCurrentState(state2);

        // 执行请求
        context.request();
    }
}
在上述示例中,我们首先定义了一个 State 接口,它包含了状态的处理方法 handleState()。然后,我们创建了两个具体状态类 ConcreteState1 和 ConcreteState2 实现了 State 接口,并分别实现了自己的状态处理逻辑。

接下来,我们定义了一个上下文类 Context,它维护了当前状态并提供了一个公共方法 request() 用于执行相应的操作。在 Context 中,我们通过 setCurrentState() 方法设置当前状态,并在 request() 方法中调用当前状态的处理方法。

最后,在主程序中,我们创建了一个 Context 对象,并设置初始状态为状态 1。然后,调用 request() 方法执行相应的操作。随后,我们将状态切换为状态 2,并再次执行请求。

通过状态模式,我们可以实现基于不同状态的不同行为,避免了大量的条件语句和分支结构,提高了代码的可扩展性和可维护性。

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

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

相关文章

基于ssm西安旅游管理系统论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对西安旅游信息管理的提升&#x…

JavaScript----字符串拼接

1、字符串拼接 字符串拼接使用: "" 运算符 var iNum1 10; var fNum2 11.1; var sStr abc;result iNum1 fNum2; alert(result); // 弹出21.1result fNum2 sStr; alert(result); // 弹出11.1abc说明 数字和字符串拼接会自动进行类型转换(隐士类型转换)&#…

使用pandas绘图,并保存,支持中文

使用pandas绘图,并保存,支持中文 支持中文标题绘图创建DataFrame绘制图形添加其他绘图细节保存图形显示图形 支持中文标题 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties import matplotlib.font_manager as fm…

深入理解Java集合框架

导语: Java集合框架是Java提供的一组用于管理对象的类和接口,它是Java编程中非常重要的一部分。Java集合框架通过提供诸如List、Set、Map等数据结构,为程序员提供了一种方便、高效的管理对象的方式。本文将深入理解Java集合框架,包…

RuntimeError: “slow_conv2d_cpu“ not implemented for ‘Half‘

目录 临时解决方法: RuntimeError: "slow_conv2d_cpu" not implemented for Half train_lora.py中: 原因:cpu不支持fp16类型, 临时解决方法: 注释掉fp16模式, weight_dtype torch.float32i…

Mediapipe绘制实时3d铰接骨架图——Mediapipe实时姿态估计

一、前言 大约两年前,基于自己的理解我曾写了几篇关于Mediapipe的文章,似乎帮助到了一些人。这两年,忙于比赛、实习、毕业、工作和考研。上篇文章已经是一年多前发的了。这段时间收到很多私信和评论,请原谅无法一一回复了。我将尝…

Redis缓存与数据库如何保证一致性

数据库和缓存如何保证一致性? 目录 数据库和缓存如何保证一致性?背景方案先更新数据库,还是先更新缓存?先更新数据库,再更新缓存先更新缓存,再更新数据库 先更新数据库,还是先删除缓存&#xff…

安装 PyQt5 保姆级教程

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 博主之前做应用层开发用的一直是 Qt,这次尝试一下在 python 中使用 Pyqt5 模块来开发 UI 界面,这里做一些…

certum的ip证书购买流程

Certum是成立于欧洲的CA认证机构,经过二十几年的发展Certum已经成为欧洲知名的CA认证机构之一,拥有广泛的客户群体和合作伙伴。IP证书是Certum为只有公网IP地址的网站准备的数字加密服务。今天就随SSL盾小编了解购买Certum旗下的IP证书流程。 第一步&am…

WPF Grid

Resource 在 WPF 中,“Grid” 是一种用于布局的面板控件,而 “Resource” 是一种用于定义可重用对象的机制。您可以将资源定义为 Grid 控件的一部分,以便在整个应用程序中共享和重用。 使用资源可以帮助您简化界面的创建和维护。在 Grid 控件…

总结一些好用的函数

1. <string.h>/<cstring>头文件 中的 memset函数 作用&#xff1a;用于将一段内存区域设置为特定的值(它作用的基本单位是字节) 可以对变量&#xff0c;数组&#xff08;一维数组和二维数组&#xff09;&#xff0c;结构体进行初始化&#xff0c;但是不能对vecto…

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录 1、概述 2、环境准备 3、读写分离实验 3.1、安装jdk 3.2、安装Mycat 3.3、配置Mycat 3.3.1、配置schema.xml ​​​​3.3.2、配置server.xml 3.4、修改主从机远程登陆权限 3.4.1、主机 3.4.2、从机 3.5、启动Mycat 3.6、登录Mycat 3.7、验证 1、概述 读写分…

如何合理配置云服务器的CPU和内存?

​  提到云服务器性能&#xff0c;大抵有两个主要影响因素&#xff0c;CPU 核心数量和内存容量 &#xff0c;它们决定了云服务器的速度和可靠性。日常运用中&#xff0c;我们如何判断网站需要需要更多或更少?如何扩大或缩小它们以优化网站的性能? 一般来说&#xff0c;您拥…

视频遥测终端机的设计需求

目录 1.目的 2.参考文件 3.总体描述 4.硬件资源描述 4.1微控制单元 4.2视频处理单元 4.3性能指标 5.功能要求 5.1系统参数要求 5.1.1系统管理 5.1.2系统配置 5.1.2.1一般参数 5.1.2.2编码参数 5.1.2.3网络参数 5.1.2.4网络服务 5.1.2.5OSD参数 5.1.2.6抓拍 5.…

java设计模式学习之【访问者模式】

文章目录 引言访问者模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用电脑示例代码地址 引言 设想你是一个艺术馆的管理员&#xff0c;艺术馆里有各种各样的艺术品。每当有游客来访时&#xff0c;根据他们的兴趣&#xff0c;他们可能只想看画、雕塑或特定的…

【开源】基于Vue+SpringBoot的房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…

华为云服务器重启后无法连接故障解决

华为云服务器系统为麒麟银河V10sp1&#xff0c;升级sp1.1后继续升级sp2. 升级后重启发现无法连接服务器了。 登录华为云控制台&#xff0c;使用用vnc方式连接成功。 推测应该是网络问题。使用ip addr命令检查&#xff0c;发现网卡eth0处于down状态。 使用命令启动网卡&…

spring security oauth2搭建认证服务器

如图&#xff08;上面图片的代码在业务项目中&#xff09;&#xff0c;第一步在独立的业务项目中&#xff0c;先获取授权码&#xff08;也叫jsessionId&#xff09;、获取授权码的路径就是 /oauth2/authorize&#xff0c;这个路径是oauth2的框架中被OAuth2AuthorizationEndpoin…

如何从RTP包的AP类型包,获取h265的PPS、SPS、VPS信息

ffmpeg播放rtp流&#xff0c;为了降低首开延迟&#xff0c;需要在SDP文件中指定PPS、SPS、VPS信息。抓包后发现wireshark无法解析AP包。需要自己进行AP包解析。RTP协议AP包格式如下&#xff1a; 根据如上信息&#xff0c;我们可以解析AP包&#xff0c;效果如下 40 01&#xff…

图像质量评估:使用 SSIM 计算图像相似性

在图像处理领域&#xff0c;衡量两幅图像之间相似性的一种常见方法是使用结构相似性指数&#xff08;SSIM&#xff09;。SSIM 是一种全参考的图像质量评估指标&#xff0c;它不仅考虑了图像的亮度、对比度&#xff0c;还考虑了结构信息。在本文中&#xff0c;我们将介绍一个使用…