当前位置: 首页 > news >正文

【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();}
}

运行结果

在这里插入图片描述

http://www.lryc.cn/news/511640.html

相关文章:

  • nvm日常使用中常用命令总结
  • 【数据仓库】SparkSQL数仓实践
  • PessimisticLock
  • 【Maven】属性管理
  • 微信小程序性能优化、分包
  • TDengine 新功能 VARBINARY 数据类型
  • 【Maven】工程依赖下载失败错误解决
  • windows系统下使用cd命令切换到D盘的方法
  • 嵌入式小白
  • xilinx 芯片使用vivado导出pindelay文件——FPGA学习笔记24
  • 自研开发哪有什么捷径
  • 【Mac】终端改色-让用户名和主机名有颜色
  • ShenNiusModularity项目源码学习(6:访问控制)
  • STM32F103RCT6学习之三:串口
  • js 计算税率错误——如何处理
  • 12. 日常算法
  • HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口
  • 咖啡即将“从天而降”,无人机外卖时代来袭
  • kettle经验篇:Pentaho Repository 类型资源库卡顿问题
  • python opencv的sift特征检测(Scale-Invariant Feature Transform)
  • 若依定时任务
  • k8s-node2 NotReady 节点NotReady如何解决?
  • Ubuntu通过mDNS实现局域网local域名和octoprint域名访问
  • 短视频矩阵账号管理技术源码搭建详解,支持OEM
  • 【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文
  • Spark SQL DML语句
  • 开发微信小程序的过程与心得
  • 【1224】数据结构(sizeof/数组的长度定义/读取字符串函数/线性表长度/左值右值/静态变量/指针与引用)
  • Android笔记(四十一):TabLayout内的tab不滚动问题
  • 基于pytorch的深度学习基础3——模型创建与nn.Module