【C#设计模式(21)——状态模式(State Pattern)】
前言
状态模式:在对象内部发生改变时改变其行为,使得对象在不同的状态下具有不同的行为表现。
代码
#region 状态模式-类/// 抽象 交通灯状态public abstract class TrafficLightState{public abstract void Display();}//红灯public class RedLight : TrafficLightState{public override void Display(){Console.WriteLine("红灯停");}}//绿灯public class GreenLight : TrafficLightState{public override void Display(){Console.WriteLine("绿灯行");}}//黄灯public class YellowLight : TrafficLightState{public override void Display(){Console.WriteLine("黄灯等待");}}//交通灯上下文public class TrafficLightContext{private TrafficLightState trafficLight;public TrafficLightContext(){trafficLight = new RedLight();}public void SetTrafficLightState(TrafficLightState trafficLight){this.trafficLight = trafficLight;}public void Display(){trafficLight.Display();}}#endregion#region 状态模式-枚举//交通灯状态枚举public enum TrafficLightEnum{Red,Green,Yellow}//交通灯枚举状态显示设置类public class TrafficLightEnumState{private TrafficLightEnum state;public void SetState(TrafficLightEnum state){this.state = state;}public void Display(){switch (state){case TrafficLightEnum.Red:Console.WriteLine("红灯停");break;case TrafficLightEnum.Green:Console.WriteLine("绿灯行");break;case TrafficLightEnum.Yellow:Console.WriteLine("黄灯等待");break;}}}//交通灯上下文(枚举设置)public class TrafficLightEnumContext{private TrafficLightEnumState trafficLight;public TrafficLightEnumContext(){trafficLight = new TrafficLightEnumState();trafficLight.SetState(TrafficLightEnum.Red);}public void SetTrafficLightState(TrafficLightEnum state){trafficLight.SetState(state);}public void Display(){trafficLight.Display();}}#endregion/** 行为型模式:Behavioral Pattern* 状态模式:State Pattern*/
internal class Program
{/** 行为型模式:Behavioral Pattern* 状态模式:State Pattern*/static void Main(string[] args){//类模式Console.WriteLine("类模式......");TrafficLightContext trafficLight = new TrafficLightContext();trafficLight.Display();trafficLight.SetTrafficLightState(new GreenLight());trafficLight.Display();trafficLight.SetTrafficLightState(new YellowLight());trafficLight.Display();//枚举模式Console.WriteLine("枚举模式......");TrafficLightEnumContext trafficLightEnumContext = new TrafficLightEnumContext();trafficLightEnumContext.Display();trafficLightEnumContext.SetTrafficLightState(TrafficLightEnum.Green);trafficLightEnumContext.Display();trafficLightEnumContext.SetTrafficLightState(TrafficLightEnum.Yellow);trafficLightEnumContext.Display();Console.ReadLine();}
}
运行结果

相关文章:
【C#设计模式(21)——状态模式(State Pattern)】
前言 状态模式:在对象内部发生改变时改变其行为,使得对象在不同的状态下具有不同的行为表现。 代码 #region 状态模式-类/// 抽象 交通灯状态public abstract class TrafficLightState{public abstract void Display();}//红灯public class RedLight : TrafficLight…...
nvm日常使用中常用命令总结
日常开发vue项目中,不同的项目 我们可能需要安装不同的node版本,但是为了方便切换node,我们一般会安装一个名称为nvm的工具,这里总结一下,nvm常用的命令: 1、为了查看可用的 Node.js 版本,你可…...
【数据仓库】SparkSQL数仓实践
文章目录 集成hive metastoreSQL测试spark-sql 语法SQL执行流程两种数仓架构的选择hive on spark数仓配置经验 spark-sql没有元数据管理功能,只有sql 到RDD的解释翻译功能,所以需要和hive的metastore服务集成在一起使用。 集成hive metastore 在spark安…...
PessimisticLock
想象你和你的朋友都想去图书馆借同一本非常受欢迎的小说。为了确保你们中的一位能够成功借到这本书,图书馆采用了悲观锁机制来管理借阅过程。 悲观锁的方式 查看书籍状态:当你到达图书馆并决定要借这本小说时,你先告诉图书管理员你想借这本…...
【Maven】属性管理
1. 属性 问题导入 定义属性有什么好处? 1.1 属性配置与使用 ①:定义属性 <!--定义自定义属性--> <properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version> </prop…...
微信小程序性能优化、分包
性能优化是任何应用开发中的重要组成部分,尤其是在移动环境中。对于微信小程序而言,随着用户量的增加和应用功能的丰富,性能优化显得尤为关键。良好的性能不仅提升用户体验,还能增加用户留存率和应用的使用频率。我们将探讨如何在…...
TDengine 新功能 VARBINARY 数据类型
1. 背景 VARBINARY 数据类型用于存储二进制数据,与 MySQL 中的 VARBINARY 数据类型功能相同,VARBINARY 数据类型长度可变,在创建表时指定最大字节长度,使用进按需分配存储,但不能超过建表时指定的最大值。 2. 功能说明…...
【Maven】工程依赖下载失败错误解决
在使用 Maven 构建项目时,可能会发生依赖项下载错误的情况,主要原因有以下几种: 下载依赖时出现网络故障或仓库服务器宕机等原因,导致无法连接至 Maven 仓库,从而无法下载依赖。 依赖项的版本号或配置文件中的版本号错…...
windows系统下使用cd命令切换到D盘的方法
windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端,使用 cd d:命令,无法将当前目录切换到D盘 解决方法 方法一:使用下面这条命令 cd /d d:运…...
嵌入式小白
1、看门狗 看门狗”就是一个计数器,由于位数有限计数器能够装的数值是有限的(比如8位的最多装256个数、16位的最多装65536个数),从开启“看门狗”那刻起,它就开始不停的数机器周期,数一个机器周期就计数器加1…...
xilinx 芯片使用vivado导出pindelay文件——FPGA学习笔记24
1、创建一个空的工程 2、在TCL命令窗输入 link_design -part xc7a35tfgg484-2(芯片型号)回车 3、输入write_csv xc7a35tfgg484-2(文件类型和文件名字) 回车,导出文件在该目录下 4、导出文件...
自研开发哪有什么捷径
许多同行看我平台成长得这么快,都在借机问我是不是有什么现成的模板可借鉴,开源的资源取巧一下。我就寻思哪有这么多现成的模板,有这巧劲去找好用的开源软件,不如踏踏实实自己设计。要我说,做研发的,除了得…...
【Mac】终端改色-让用户名和主机名有颜色
效果图 配置zsh 1.打开终端,进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…...
ShenNiusModularity项目源码学习(6:访问控制)
ShenNius.Admin.API项目中的控制器类的函数如果需要访问控制,主要是调用ShenNius.Infrastructure项目下的AuthorityAttribute特性类实现的。AuthorityAttribute继承自ActionFilterAttribute抽象类,后者用于在调用控制器操作函数前后自定义处理逻辑&#…...
STM32F103RCT6学习之三:串口
1.串口基础 2.串口发送 1)基本配置 注意:实现串口通信功能需在keil中设置打开Use Micro LIB,才能通过串口助手观察到串口信息 2)编辑代码 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration-------------…...
js 计算税率错误——如何处理
处理方法 var 税额Number(price_notax)*Number(tax_rate)/100;税额税额.toFixed(2);var 含税单价Number(price_notax)Number(税额);var 非小计Number(price_notax)*Number(common_num);var 含税小计Number(含税单价)*Number(common_num);含税小计含税小计.toFixed(2); 税额税额…...
12. 日常算法
1. 主持人调度(一) 题目来源 class Solution { public:bool hostschedule(vector<vector<int>>& schedule) {// write code heresort(schedule.begin(), schedule.end());int start -1, end 0;for (auto & nums : schedule){end…...
HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口
1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…...
咖啡即将“从天而降”,无人机外卖时代来袭
如今,在我国的一些城市,无人机配送咖啡已经从设想变为现实,开启了商业化的初步尝试。 当咖啡遇上无人机,奇妙场景开启 想象一下这样的画面:你在户外的露营地,慵懒地躺在帐篷里,或是在城市公园…...
kettle经验篇:Pentaho Repository 类型资源库卡顿问题
2024年马上就结束了,终于在结束前解决了困扰许久的一个问题:kettle的Pentaho Repository 资源库异常卡顿。所以在此也梳理、记录下2024年的最后一个大问题。 项目场景 工作中一个重要内容是数据中心项目,也就必不可少的要用到ETL技术&#x…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
