行为型模式-状态模式(State)

2023-10-31

概述

  当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。(定义)

  状态模式的核心理念就是将不同状态对应的行为封装到状态中,在状态变化时改变依赖状态对象的行为。

  那种在一个方法内对状态进行多重判断的方式,虽然可以根据不同的状态响应不同的结构,但不叫改变了行为方式,只是一种方法走向不同的分支。

结构

   上下文类: 它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。

​   抽象状态类: 定义一个接口,用以封装上下文对象中与状态相关的行为。

   具体实现类: 实现抽象状态所对应的行为。

实现

  对有状态的上下文对象,把与状态有关的复杂判断逻辑提取到不同的状态对象中,则在对象状态发生改变时上下文对象的行为也发生了改变。

在这里插入图片描述

优缺点

​  优点:

​    避免了多重判断的巨大语句块。

    将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。

​  缺点:

    状态模式的使用必然会增加系统类和对象的个数。

    状态模式对"开闭原则"的支持并不太好。当增加状态时需要修改上下文类。

使用场景

​  当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

行为型模式-状态模式(State) 的相关文章

  • PAL制搜台

    PAL电视制式 PAL电视制式 Phase Alternating Line 采用625线制式 视讯制式采用PAL B G PAL D K PAL I等 PAL电视不像NTSC制式有中心频点 它采用宽带的频率范围进行电视信号的调制和传输 P

随机推荐

  • Windows在命令行中直接使用conda虚拟环境以及一些实用的conda命令

    在命令行中输入conda env list 可以查看当前已有的全部conda虚拟环境 如下图 输入conda create n name python version可以创建指定python版本的名称为name的虚拟环境 输入conda c
  • Linux常用命令-2

    为了掌握本关知识 你需要掌握 Linux文件操作之创建文件 删除文件 Linux文件夹操作之创建文件夹 删除文件夹 文件和文件夹拷贝 移动 重命名 Linux文件操作 Linux系统中最常用的文件操作有创建 删除文件等 创建文件 linux
  • 【LaTeX Workshop】VS Code 与 SumatraPDF 双向链接配置方法

    TeX Live 2021 Sumatra PDF v3 4 6 64 bit VS Code v1 62 3 system setup LaTeX Workshop v8 22 0 SumatraPDF 配置 安装 SumatraPDF
  • luckysheet使用——导出并下载excel数据及钩子函数的使用等

    这里记录一些常用的API 包括对于获取整个在线excel的数据 使用钩子函数等 获取Excel数据luckysheet getAllSheets 可以将获取到的数据传递到后端通过JSONArray来获取 它是一个一个的sheet页对象的数组
  • C语言基础入门48篇_15_条件运算符(expr1?expr2:expr3,三元运算符,

    条件运算符是C语言中唯一的三元运算符 其基本形式为 expr1 expr2 expr3 一个条件运算符它需要三个表达式 如果expr1的值为非0 则整个条件表达式的值为expr2 如果expr1的值为0 则整个条件表达式的值为expr3 1
  • java和c++区别

    java string类写在heap中 无法修改 c 放在text区 可以修改 java 的块内镶嵌的块不允许变量名重复 c 允许 实行就近法则 转载于 https www cnblogs com bloomingFlower p 1161
  • saltstack之系统初始化状态编写

    saltstack之系统初始化状态编写 1 目录结构 2 关闭selinux 3 关闭防火墙 4 时间同步 chrony 5 内核优化与文件描述 6 ssh服务优化 7 精简开机系统服务 8 历史记录优化 设置终端超时时间 9 yum源 1
  • 数据库基础知识(MySQL入门)

    数据库基础知识 MySQL入门 文章目录 数据库基础知识 MySQL入门 一 基本概念 二 特点 一 基本概念 Information 信息是对客观世界中各种事物的运动状态和变化的反映 是数据的含义 Data 数据用来记录信息的可识别符号
  • java基本语法题目_JAVA的语法基础 练习题

    1 编写Java程序 声明两个int型变量 运用三元运算符判断两个变量是否相等 若不相等 求出两个数中较大的 public class 练习题 public static void main String args int a 10 int
  • 验证集准确率上不去_经验之谈|处理不平衡数据集的7个技巧

    作者 Ye Wu Rick Radewagen编译 ronghuaiyang 介绍 具体的领域中的数据集是什么样的 银行中的欺诈检测 市场中的实时投标 网络中的入侵检测 常见吗 这些领域中的数据 常常只有不到1 的少数 但是 有兴趣 的事件
  • jmeter 固定定时器

    固定定时器 Constant Timer 是一个定时器元件 可以在线程组中的每个线程之间添加固定的延迟时间 固定定时器会对每个线程的执行进行一定的暂停 聊一下和线程组中的调度器对线程组执行时长的影响 相同 都会影响线程组的运行时长 不同 固
  • 加载动态库失败(loadLibrary返回为空 GetLastError126)解决办法 dll有依赖的dll缺失

    问题 加载动态库失败 loadLibrary返回为空 排除 64位也对 平台相同 错误 至少找不到一个必需的隐式或转发依赖项 这个不影响 SmartPay PGL dll下的四个dll 则是他所依赖的四个dll 因为我这里有缺失 显示黄色的
  • 本地ubuntu22.04装cuda11.7+torch2.0.1流程记录

    想要更新cuda11 7 需要的驱动最低版本515 65 01 而我的电脑原驱动为470 需要更新 1 卸载原驱动 使用了命令 sudo apt get purge nvidia sudo apt get autoremove 用以下命令检
  • MATLAB矩阵乘法14例

    MATLAB矩阵乘法14例 简介 矩阵乘法是线性代数中的基本运算之一 也是MATLAB中的重要运算 矩阵乘法的结果是两个矩阵的乘积 其中一个矩阵的列数等于另一个矩阵的行数 在这篇文章中 我们将介绍20个MATLAB矩阵乘法的例子 帮助您更好
  • 什么是自动化测试框架?我们该如何搭建自动化测试框架?

    无论是在自动化测试实践 还是日常交流中 经常听到一个词 框架 之前学习自动化测试的过程中 一直对 框架 这个词知其然不知其所以然 最近看了很多自动化相关的资料 加上自己的一些实践 算是对 框架 有了一些理解 这篇博客 就聊聊自动化框架的一些
  • 根因定位FluxRank论文通过核密度估计(KDE)获得变化量部分

    II CHANGE QUANTIFICATION CHANGE QUANTIFICATION说明 A 变化开始时间 B 变化程度 论文 FluxRank A Widely Deployable Framework to Automatica
  • Mybatis之分页插件PageHelper工作原理

    前言 数据分页功能是软件系统中必备的功能 在持久层使用mybatis的情况下 pageHelper来实现后台分页则是我们常用的一个选择 所以本文专门介绍下 需要的依赖
  • Spring Boot 实现用户行为记录的四种方式

    目录 一 需求背景 二 需要的pom依赖 三 AOP切面编程实现 四 Interceptor拦截器实现 五 Filter过滤器实现 六 ArgumentResolver 七 拓展部分 八 参考文献 一 需求背景 根据产品经理要求 需要对用户
  • npx mkdirp命令

    npx是什么 npx 是 npm v5 2 0引入的一条命令 更方便开发者使用包内提供的命令行工具 ep1 npm原方式 npm install g create react app create react app my app npx方
  • 行为型模式-状态模式(State)

    概述 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 定义 状态模式的核心理念就是将不同状态对应的行为封装到状态中 在状态变化时改变依赖状态对象的行为 那种在一个方法内对状态进行多重判断的方式 虽然可以根据不同的状态