学而时习之---状态模式

在软件系统中,有些对象也像水一样具有多种状态,
这些状态在某些情况下能够相互转换,
而且对象在不同的状态下具有不同的行为。
为了更好地对这些具有多种状态的对象进行设计。
使用一种被称为状态模式的设计模式。

状态模式用于解决系统中复杂的状态转换以及
不同状态下行为的封装的问题。

对象在不同状态下行为不相同时可以使用状态模式。
状态模式将一个对象的状态
从该对象中分离出来,封装到专门的状态类中,
使得对象状态可以灵活变化,
对于客户端而言,不关心对象状态转换以及
对象所处的当前状态。
无论对于何种状态的对象,客户端都可以一致处理。

允许一个对象在其内容状态改变时改变它的行为,
对象看起来似乎修改了它的类。

当你允许一个对象在其内部状态改变时改变其行为,这就意味着该对象具有某种形式的条件行为或状态依赖行为。换句话说,对象的行为会根据其当前的状态而变化。

举一个简单的例子:一个自动调温器。

假设你有一个简单的自动调温器对象,它有两个状态:“加热”和“冷却”。
当调温器的当前温度低于某个设定值时,它应该开始加热;而当当前温度高于某个设定值时,它应该开始冷却。
当调温器的状态(加热或冷却)改变时,它的行为(加热或冷却)也会相应地改变。
在面向对象编程中,你可以使用状态模式(State Pattern)来实现这种行为。
状态模式允许一个对象在其内部状态改变时改变其行为,同时保持其接口不变。
这样,对象的行为是根据它的状态动态地决定的。

核心点:

1.状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中。
2.允许一个对象在其内容状态改变时改变它的行为。抽象状态类,具体状态类。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AJAX(二)jQuery

一、jQuery中的AJAX BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 我们将该链接引入get.html文件里面: service.js: //1.引入express const expressrequire(express); //2.创建应用对象 const appexpress(); //3.创建路由规则 //request是对请求报文的封…

yolov5旋转目标检测-遥感图像检测-无人机旋转目标检测(附代码和原理)

目前,无人机技术的快速发展带来了遥感图像处理领域的革命性改变。然而,由于无人机在飞行时可能会出现旋转的情况,因此对于旋转目标的检测也成为了一个重要的问题。针对这个问题,yolov5可以提供一种高效的解决方案。 以下是介绍的分…

编写.NET的Dockerfile文件构建镜像

创建一个WebApi项目,并且创建一个Dockerfile空文件,添加以下代码,7.0代表的你项目使用的SDK的版本,构建的时候也需要选择好指定的镜像tag FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443F…

适合 C++ 新手学习的开源项目——在 GitHub 学编程

作者:HelloGitHub-小鱼干 俗话说:万事开头难,学习编程也是一样。在 HelloGitHub 的群里,经常遇到有小伙伴询问编程语言如何入门方面的问题,如: 我要学习某一门编程语言,有什么开源项目可以推荐…

电源板设计方案怎么写 (评审文件)

1. 首先是大致的图形模块化说明。 1. 大致的框图 2. 统计项目需要的功率和需求 此表格数据是假的,只是为了展示 电源种类是: 板子需要供电需要的电压和对应电压最大的电流。 电源时序是: 板子…

canvas设置文字阴影

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

六、基于Flask、Flasgger、marshmallow的开发调试

基于Flask、Flasgger、marshmallow的开发调试 问题描述调试方法一调试方法二调试方法三 问题描述 现在有一个传入传出为json格式文件的,Flask-restful开发的程序,需要解决如何调试的问题。 #!/usr/bin/python3 # -*- coding: utf-8 -*- # Project :…

MacOS - 苹果电脑程序还能正常启动,但图标消失不见了~

问题描述 网上有一些解决方案说是 killall Finder 命令,重置 Docker 等等,但是发现还是不行,于是必杀技…… 解决方案 方案一、删除该 App,重装即可方案二、如果懒得重装,可以在 Finder 中找到对应的应用程序&#xf…

【重点】【BFS】542.01矩阵

题目 法1&#xff1a;经典BFS 下图中就展示了我们方法&#xff1a; class Solution {public int[][] updateMatrix(int[][] mat) {int m mat.length, n mat[0].length;int[][] dist new int[m][n];boolean[][] used new boolean[m][n];Queue<int[]> queue new Li…

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种&#xff0c;在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义&#xff1a;二叉树的创建&#xff1a;二叉树的遍历&#xff1a;前序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a; 二叉树节点个数…

DevOps(6)

目录 26.如何在Linux下跨不同的虚拟桌面共享程序&#xff1f; 27.无名&#xff08;空&#xff09;目录代表什么&#xff1f; 29.什么是守护进程&#xff1f; 30.如何从一个桌面环境切换到另一个桌面环境&#xff0c;例如从KDE切换到Gnome? 26.如何在Linux下跨不同的虚拟桌面…

使用STM32和ESP8266构建智能家居网络

本文将介绍如何使用STM32微控制器和ESP8266 WiFi模块构建一个智能家居网络。我们将讨论智能家居网络的整体设计思路、硬件连接和软件开发。通过本文的指导和示例代码&#xff0c;读者将能够搭建一个智能家居系统&#xff0c;实现远程控制和数据监测。 一、智能家居网络的整体设…

16|连接数据库:通过链和代理查询鲜花信息

16&#xff5c;连接数据库&#xff1a;通过链和代理查询鲜花信息 新的数据库查询范式 下面这个图&#xff0c;非常清晰地解释了这个以 LLM 为驱动引擎&#xff0c;从自然语言的&#xff08;模糊&#xff09;询问&#xff0c;到自然语言的查询结果输出的流程。 这种范式结合了…

【愚公系列】2023年12月 HarmonyOS应用开发者高级认证(完美答案)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

【React系列】Redux(三) state如何管理

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. reducer拆分 1.1. reducer代码拆分 我们来看一下目前我们的reducer&#xff1a; function reducer(state ini…

【flink番外篇】9、Flink Table API 支持的操作示例(14)- 时态表的join(java版本)

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

Redis 哨兵主备切换的数据丢失问题

导致数据丢失的两种情况 主备切换的过程&#xff0c;可能会导致数据丢失&#xff1a; 异步复制导致的数据丢失 因为 master->slave 的复制是异步的&#xff0c;所以可能有部分数据还没复制到 slave &#xff0c; master 就宕机 了&#xff0c;此时这部分数据就丢失了…

VSCode远程开发配置和SSH免密登录

目录 概要远程开发插件安装开始连接SSH免密登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码&#xff0c;使用远程开发&#xff0c;可以在与生产环境相同的环境中开发、测试和部署代码&#xff0c;减少因环境不同而导致的问题。本文将详细介绍如何通过VSCode连…

【MySQL】字符集与排序规则

在MySQL数据库中&#xff0c;字符集&#xff08;Character Set&#xff09;和排序规则&#xff08;Collation,也称字符集校验规则&#xff09;是重要的概念&#xff0c;它们对于正确存储和比较数据至关重要。 字符集与排序规则 字符集是一组字符的集合&#xff0c;与数字编码…

prometheus与zabbix监控的对比介绍

一、普米与zabbix基本介绍 1、prometheus介绍 Prometheus的基本原理是Prometheus Server通过HTTP周期性抓取被监控组件的监控数据&#xff0c;任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式&#xff0c;就可以接入Prometheus监控。 工作流程大致分为收集数…