设计模式:(状态模式)

article/2025/9/22 10:43:55

1.定义

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
简单来说:状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

2.概述

一个对象的状态依赖于它的变量的取值情况,对象在不同的运行环境中,可能具有不同的状态。在许多情况下,对象调用方法所产生的行为效果依赖于它当时的状态。
状态模式的关键是将对象的状态封装成独立的类,对象(Context)调用方法时,可以委托当前对象所具有的状态(ConcreteState)调用相应的方法,使当前对象看起来好像修改了它的类。

3.应用场景

1、行为随状态改变而改变的场景。
2、条件、分支语句的代替者。
3、一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

4.模式的结构与使用

状态模式包括三种角色。
环境(Context): 环境是一个类,该类含有抽象状态(State)声明的变量,可以引用任何具体状态类的实例。用户对该环境(Context)类的实例在某种状态下的行为感兴趣。
抽象状态(State): 抽象状态是一个接口或抽象类。抽象状态中定义了与环境(Context)的一个特定状态相关的若干个方法。
具体状态(ConcreteState): 具体状态是实现(扩展)抽象状态(抽象类)的类。

1.状态模式的UML类图

在这里插入图片描述

2.结构的描述

以下通过一个简单的问题来描述怎样使用状态模式,这个简单的问题就是:设计带文字提示信息的温度计。带文字提示细腻的温度计可以根据用户的需求显示某些提示信息,比如用户希望温度在0度以下,显示提示信息为“低温温度”,温度在10-26度至今时,显示提示信息为“正常温度”,当温度在大于39度时,显示提示信息为“高温温度”。
1.抽象状态(State)
对于本问题,抽象状态(State)是TemperatureState接口,代码如下所示:
里面只有一个showTemperature()方法,可以显示具体温度的状态。

public interface TemperatureState {public void showTemperature();
}

2.具体状态(ConcreteState)
对于本问题,共有三个具体状态角色,分别是LowState,MiddleState和HeightState类,分别如下所示:
在里面定义一个默认的温度变量n,并实现了抽象状态的showTemperature()方法。
LowState.java

public class LowState implements TemperatureState{double n=0;public LowState(double n) {if(n<0)this.n = n;}@Overridepublic void showTemperature() {System.out.println("现在的温度是"+n+"属于低温度");}
}

MiddleState.java

public class MiddleState implements TemperatureState{double n=15;public MiddleState(double n) {if(n>0 && n<26)this.n = n;}@Overridepublic void showTemperature() {System.out.println("现在的温度"+n+"属于正常温度");}
}

HeightState.java

public class HeightState implements TemperatureState{double n=30;public HeightState(double n) {if(n>=39)this.n = n;}@Overridepublic void showTemperature() {System.out.println("现在的温度"+n+"属于高温度");}
}

3.环境(Context)
本问题中,环境角色是Thermometer类,代码如下:
在该类中有抽象状态的类变量引用,并通过set方法设置当前具体状态,通过showTemperature()方法显示当前类变量state的温度情况。

public class Thermometer {TemperatureState state;public void  showMessage(){System.out.println("********");state.showTemperature();System.out.println("********");}public void setState(TemperatureState state){this.state=state;}
}

4.测试程序
Application.java

public class Application {public static void main(String[] args) {TemperatureState state=new LowState(-12);Thermometer thermometer=new Thermometer();//定义Context(上下文)thermometer.setState(state);thermometer.showMessage();//切换状态state=new MiddleState(20);thermometer.setState(state);thermometer.showMessage();//切换状态state=new HeightState(39);thermometer.setState(state);thermometer.showMessage();}
}

5.测试结果展示
在这里插入图片描述

5.状态模式的优点

1、封装了转换规则。
2、枚举可能的状态,在枚举状态之前需要确定状态种类。
3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。 5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

6.状态模式与策略模式的比较

1.对状态进行建模时,状态迁移是一个核心内容;然而,在选择策略时,迁移与此毫无关系。另外,策略模式允许一个客户选择或提供一种策略,而这种思想在状态模式中完全没有;
2.策略模式用于随不同外部环境采取不同行为的场合;
3.在状态模式中,状态的迁移是由对象的内部条件决定,外界只关心起接口,不必关心其状态对象的创建与转化;而策略模式里,采取何种策略由外部条件决定


http://chatgpt.dhexx.cn/article/ADXgmkx6.shtml

相关文章

设计模式第10式:状态模式

前言 我们遇到状态机模型&#xff0c;常常会理不清“状态”和“行为”的关系。状态模式就是专门解决这个应用场景的&#xff0c;它通过改变对象内部的状态来帮助对象控制自己的行为。 正文 1、先来看一个案例 我们选取《HeadFirst 设计模式》中的糖果售卖机案例。这就是常见…

# 设计模式

设计模式 文章目录 设计模式设计模式总览单例模式类图定义特点单例模式的实现方式 工厂模式类图定义特点实现方式 抽象工厂模式类图定义特点实现方式 观察者模式类图简单理解使用场景实例代码 策略模式类图简单理解使用场景实例代码 模板方法模式类图简单理解实例代码 原型模式…

安全漏洞与网络攻击

目录 一、安全漏洞及产生原因 1. 安全漏洞概念 2. 漏洞产生的技术原因 3. 漏洞产生的经济原因 二、信息收集与分析 1. 攻击的过程 2. 信息收集&#xff1a;攻击的前奏 3. 收集什么信息 4. 信息收集与分析工具 5. 公开信息收集-搜索引擎 6. 信息收集与分析 7. 信息收…

网络安全学习-WEB安全常见漏洞

注入类漏洞 SQL注入漏洞 定义 sql注入漏洞&#xff0c;就是将用户可控的数据拼接到了sql语句当中&#xff0c;一起提交到了数据库执行。 攻*击者通过注入语句&#xff0c;改变sql执行的逻辑&#xff0c;通过控制部分sql语句&#xff0c;攻击者可以查询到数据库钟任何自己需要…

网站安全漏洞--大全

原文网址&#xff1a;网站安全漏洞--大全_IT利刃出鞘的博客-CSDN博客 简介 本文介绍网站常见的一些安全漏洞。 常见的漏洞有&#xff1a;SQL 注入、越权操作、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、DDoS 攻击、JSON 劫持、暴力破解、HTTP 报头追踪漏洞、信息泄露、文件上…

Springboot -- 网络安全漏洞处理

文章目录 不安全的 HTTP 方法以及 Nginx 屏蔽版本号显示说明检测方式不安全的 HTTP 方法 处理代码屏蔽 Nginx 版本号显示 点击劫持漏洞说明什么是ClickJacking检测方式处理代码 XSS跨站脚本攻击说明检测方式处理代码 &#xff08;参考网上的代码&#xff0c;主要是对传入的信息…

网络安全实验3 漏洞扫描

赞赏码 & 联系方式 & 个人闲话 【实验名称】漏洞扫描 【实验目的】 1.熟悉X-Scan工具的使用方法&#xff1b; 2.熟悉FTPScan工具的使用方法&#xff1b; 3.会使用工具查找主机漏洞 4.学会对弱口令的利用 5.了解开启主机默认共享以及在命令提示下开启服务的方法 …

网络安全技能大赛D模块常规漏洞加固详解

一、 说明&#xff1a; 1.所有截图要求截图界面、 字体清晰&#xff1b; 2.文件名命名及保存&#xff1a; 网络安全模块 D- XX&#xff08;XX为工位号&#xff09;&#xff0c; PDF 格式保存&#xff1b; 3.文件保存到 U盘提交。 4.linux 系统 root 密码 123456&#xff1b; 请…

2022年统计的27个网络安全漏洞数据信息

网络安全漏洞通常是指软件代码中允许攻击者访问网络或系统的缺陷。漏洞使企业和个人面临一系列威胁&#xff0c;包括恶意软件和帐户接管。 他们的漏洞利用存在大量可能的漏洞和潜在后果。美国政府的国家漏洞数据库 (NVD)由常见漏洞和暴露 (CVE) 列表提供&#xff0c;目前有超过…

计算机漏洞分几个等级,网络安全漏洞可以分为各个等级,A级漏洞表示?

满意答案 某匪kevin 2013.04.04 采纳率&#xff1a;44% 等级&#xff1a;11 已帮助&#xff1a;5835人 答案时B ----------------分级原则----------- 对漏洞分级有助于在漏洞被发现后&#xff0c;提供用户更多的信息以便于更快的给漏洞定位&#xff0c;并决定下一步采取的措…

网络安全常见漏洞原理及其防御

目录 1.SQL注入 1.1原理 1.2注入演示 1.3防御 1.4 补充 2.xss&#xff08;跨站脚本攻击&#xff09; 2.1 原理 2.2 注入演示 2.3防御 3.csrf&#xff08;跨站点请求伪造&#xff09; 3.1原理 3.2 注入演示 3.3 防御 4.文件上传 4.1原理 4.2 攻击演示 4.3防御 1.…

医疗器械网络安全漏洞自评报告模板

提示&#xff1a;编制医疗器械网络安全漏洞自评报告要点解析 文章目录 1. 目的2. 引用文件3. CVSS漏洞等级3.1 概述3.1.1 适用范围说明3.1.2 CNNVD-ID定义3.1.3 编码原则3.1.4 CNNVD-ID语法介绍 3.2 指标分析3.2.1 基本指标3.2.1.1可用性指标1)攻击向量2)攻击复杂性3)所需权限4…

Web网络安全漏洞分析,SQL注入原理详解

本文主要为大家介绍了Web网络安全漏洞分析SQL注入的原理详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff0c;祝大家多多进步&#xff0c;早日升职加薪 一、SQL注入的基础 1.1 介绍SQL注入 SQL注入就是指Web应用程序对用户输入数据的合法性没…

信息安全技术 网络安全漏洞分类分级指南(GB/T 30279-2020 )

文章目录 前  言1 范围2 规范性引用文件3 术语和定义4 缩略语5 网络安全漏洞分类5.1 概述5.2 代码问题5.3 配置错误5.4 环境问题5.5 其他 6 网络安全漏洞分级6.1 概述6.2 网络安全漏洞分级指标6.3 网络安全漏洞分级方法 附 录 A&#xff08;规范性附录&#…

计算机网络存在的漏洞,常见的计算机网络安全漏洞有哪些

当今的世界呈现网络信息化、网络全球化的发展大趋势。因此&#xff0c;我们应该竭尽全能地享受其带来的优势和便利&#xff0c;让信息网络为人类的生活进行健康服务。同时&#xff0c;我们还应该采取一切措施将各类危害网络信息安全的病毒清扫干净。只有防患于未然&#xff0c;…

信安软考 第十三章 网络安全漏洞防护技术原理

一、网络安全漏洞概述 1.1 网络安全漏洞概念 网络安全漏洞又称为脆弱性&#xff0c;简称漏洞。漏洞一般是致使网络信息系统安全策略相冲突的缺陷&#xff0c;这种缺陷通常被称为安全隐患。安全漏洞的影响主要有机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控性下降、…

网络安全漏洞检测

漏洞检测 任务说明&#xff1a;仅能获取Server3的IP地址 靶机场景&#xff1a;Server3 172.16.101.250 在MSF工具中用search命令搜索MS12020 RDP拒绝服务攻击模块&#xff0c;将回显结果中的漏洞披露时间作为Flag值提交&#xff1b;&#xff08;如&#xff1a;2012-10-16&am…

网络安全常见十大漏洞总结(原理、危害、防御)

一、弱口令【文末福利】 产生原因 与个人习惯和安全意识相关&#xff0c;为了避免忘记密码&#xff0c;使用一个非常容易记住 的密码&#xff0c;或者是直接采用系统的默认密码等。 危害 通过弱口令&#xff0c;攻击者可以进入后台修改资料&#xff0c;进入金融系统盗取钱财…

网络安全常见十大漏洞总结(原理、危害、防御)_网络安全十大漏洞

一、弱口令【文末福利】 产生原因 与个人习惯和安全意识相关&#xff0c;为了避免忘记密码&#xff0c;使用一个非常容易记住 的密码&#xff0c;或者是直接采用系统的默认密码等。 危害 通过弱口令&#xff0c;攻击者可以进入后台修改资料&#xff0c;进入金融系统盗取钱财…

【python】采集每日必看黄色软件数据~

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests re csv 安装模块&#xff1a;win R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内…