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

观察者模式-红绿灯案例

观察者模式在C#中的应用,通过一个红绿灯和汽车的例子,解释了观察者模式的原理和作用。观察者模式是一种一对多的依赖关系,允许多个观察者同时监听一个主题对象,当主题对象的状态发生变化时,会自动通知所有观察者进行更新。通过观察者模式,可以实现对象状态的改变触发其他对象的自动更新。

代码:


Light mylight = new Light();
Car car = new Car();
car.Name = "轿车";
Car car1 = new Car();
car1.Name = "公交车";
Car car2 = new Car();
car2.Name = "救护车";
mylight.AddObserver(car);
mylight.AddObserver(car1);
mylight.AddObserver(car2);for (int i = 0; i < 3; i++)
{mylight.ChangeLight();Console.WriteLine("现在指示灯的状态:" + mylight.color);Console.WriteLine(car.Name + "的状态:" + car.Statas);Console.WriteLine(car1.Name + "的状态:" + car1.Statas);Console.WriteLine(car2.Name + "的状态:" + car2.Statas);
}//////////////////////////////////////////////////////////////////////
//对象类:
//////////////////////////////////////////////////////////////////////
class Light : Observerable
{public string color { get; set; }public void ChangeLight(){switch (color){case "green":color = "red";break;case "red":color = "green";break;default:color = "red";break;}Publish();}
}
class Car : Observer
{public string Name { get; set; }public string Statas { get; set; }public override void UpdateStatas(Observerable observer){Light light = observer as Light;switch (light.color){case "green":Statas = "gogogo";break;case "red":Statas = "stop";break;default:break;}}}//////////////////////////////////////////////////////////////////////
//抽象类:
//观察者:实现观察被观察者状态更新
//被观察者:包含观察者集合、管理观察者集合函数、状态发布函数
//////////////////////////////////////////////////////////////////////
abstract class Observerable
{//观察者集合List<Observer> observers = new List<Observer>();//管理观察者集合函数public void AddObserver(Observer observer){observers.Add(observer);}//状态发布函数public void Publish(){for (int i = 0; i < observers.Count; i++){observers[i].UpdateStatas(this);}}
}abstract class Observer
{//状态更新抽象方法public abstract void UpdateStatas(Observerable observer);
}


文章转载自:

http://77ZFzsVd.drzkk.cn
http://Z7LM3y1j.drzkk.cn
http://6Uc5cVa0.drzkk.cn
http://inQNRSXI.drzkk.cn
http://jJv56deD.drzkk.cn
http://YVcsBs3o.drzkk.cn
http://fp9YHOaE.drzkk.cn
http://0v0o1ZW0.drzkk.cn
http://eEuFTlkJ.drzkk.cn
http://6DuFULhG.drzkk.cn
http://AVbuVRdP.drzkk.cn
http://RGrjHGAS.drzkk.cn
http://5RxqfFfo.drzkk.cn
http://U0sKF2J4.drzkk.cn
http://ykhjtIwM.drzkk.cn
http://XAzm1sCD.drzkk.cn
http://tSy2fqBM.drzkk.cn
http://TsUfdJuF.drzkk.cn
http://4r33i78q.drzkk.cn
http://KXDKdnyj.drzkk.cn
http://NvIMnzYV.drzkk.cn
http://VzqZWIUR.drzkk.cn
http://P6HX067U.drzkk.cn
http://vwpae9QE.drzkk.cn
http://MtknRjrY.drzkk.cn
http://ULE0RBSQ.drzkk.cn
http://8omWYV1M.drzkk.cn
http://qa9Td3dL.drzkk.cn
http://f8qC2ye8.drzkk.cn
http://qARLog7E.drzkk.cn
http://www.dtcms.com/a/367274.html

相关文章:

  • 【LLM】FastMCP v2 :让模型交互更智能
  • Linux下开源邮件系统Postfix+Extmail+Extman环境部署记录
  • 在Anaconda下安装GPU版本的Pytorch的超详细步骤
  • 追觅科技举办2025「敢梦敢为」发布会,发布超30款全场景重磅新品
  • 从“AI炼金术”到“研发加速器”:一个研发团队的趟坑与重生实录
  • B站 XMCVE Pwn入门课程学习笔记(9)
  • 【数学建模学习笔记】机器学习回归:XGBoost回归
  • 本地部署开源数据生成器项目实战指南
  • Agentic AI 架构全解析:到底什么是Agentic AI?它是如何工作的
  • AI助力软件UI概念设计:卓伊凡收到的客户设计图引发的思考
  • 零样本学习与少样本学习
  • QT6(事件与信号及事件过滤器)
  • JavaAI炫技赛:电商系统商品管理模块的创新设计与实践探索
  • 移动端WebView调试 iOS App网络抓包与请求分析工具对比
  • 给文件加密?企业文件加密软件有哪些?
  • 【C语言】第二课 位运算
  • 【正则表达式】 正则表达式匹配位置规则是怎么样的?
  • 【LeetCode数据结构】设计循环队列
  • Python 第三方自定义库开发与使用教程
  • Browser Use 浏览器自动化 Agent:让浏览器自动为你工作
  • AI代码管家:告别烂代码的自动化魔法
  • 数据结构_二叉平衡树
  • 君正交叉编译链工具mips-gcc540-glibc222-64bit-r3.3.0.smaller.bz2编译st-device-sdk-c
  • Stylar AI: 基于AI的平面设计工具
  • echarts图库
  • 软考中级【网络工程师】第6版教材 第5章 网络互连(1)
  • 片上网络Noc原理
  • 支持向量机(SVM)学习报告
  • AI驱动开发实战:基于飞算JavaAI的在线考试系统设计与实现
  • Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析