C#观察者设计模式


本文提供全流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)


Chinar —— 心分享、心创新!

助力快速理解 观察者设计模式

为新手节省宝贵的时间,避免采坑!

Chinar 教程效果:

刑警警察叔叔注视了一下四周
穿黑色衣服的:神偷 - 跑了
穿白色衣服的:笨贼 - 跑了
穿平常色衣服的:平民 - 跑了
穿红色衣服的:强盗 - 跑了

  • 1

    • Police —— 警察类
  • 2
    • Thief —— 小偷
  • 3
    • Main —— 主入口
  • 4
    • Console —— 控制台输出
  • 支持
    • May Be —— 搞开发,总有一天要做的事!

全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Police —— 警察类

这个类用来表示警察

当警察看向四周的时候,所有事件下的订阅者,都会被调用到

也可以理解为广播:当警察看向四周,所有小偷都接收到了广播

    /// <summary>/// 警察类/// </summary>class Police{private      string type;       //类型private      string name;       //名称public event Action PoliceLook; //委托+event变事件/// <summary>/// 构造函数/// </summary>/// <param name="type">类型</param>/// <param name="name">名称</param>public Police(string type, string name){this.type = type;this.name = name;}/// <summary>/// 注视/// </summary>public void LookAt(){Console.WriteLine(type + name + "注视了一下四周");if (PoliceLook != null){//外部调用LookAt后,当警察注视周围的时候。会调用事件对象中,所有订阅的用户(也就是所有小偷,因为所有小偷都订阅了)PoliceLook();}}//区别://1.事件不能在类的外部,通过类对象调用;事件提供广播,订阅//2.委托可以,在内外调用//3.事件表达外发的接口、委托常用回调函数//

2

Thief —— 小偷

这个类用来表示小偷,具备基本属性名字、颜色、逃跑功能

那什么时候逃跑呢??就是当警察看向四周的时候逃跑

就是让所有小偷、订阅警察看向四周的事件,从而达到设计目的

    /// <summary>/// 小偷类/// </summary>class Thief{private string name;  //名字private string color; //衣服颜色/// <summary>/// 构造/// </summary>/// <param name="name">小偷名</param>/// <param name="color">衣服颜色</param>/// <param name="police">警察</param>public Thief(string name, string color, Police police){this.name         =  name;this.color        =  color;police.PoliceLook += Run; //把自身的逃跑方法,注册/订阅 警察类的事件对象中。一旦警察有Look这个动作,Run方法就会执行}/// <summary>/// 小偷逃跑打印方法/// </summary>public void Run(){Console.WriteLine("穿" + color + "衣服的:" + name + " - 跑了");}}

3

Main —— 主入口

这个类用来测试、打印输出结果

直观的表示事件变动

这个观察者设计模式很简单,直观的即可明白事件、委托是怎样传递信息的

/// <summary>/// 测试类——用来输出结果/// </summary>class Program{/// <summary>/// 程序主入口/// </summary>/// <param name="args"></param>static void Main(string[] args){Police police = new Police("刑警", "警察叔叔");Thief  thief1 = new Thief("神偷", "黑色",  police);Thief  thief2 = new Thief("笨贼", "白色",  police);Thief  thief3 = new Thief("平民", "平常色", police);Thief  thief4 = new Thief("强盗", "红色",  police);//police.PoliceLook += thief1.Run;//这种方法没有上边直接构造简单,目的都一样//police.PoliceLook += thief2.Run;//police.PoliceLook += thief4.Run;police.LookAt(); //当警察对象有所动作的时候,所以订阅了的小偷。都会被传达信息,从而调用事件中封装的所有订阅者函数Console.ReadLine();}}

4

Console —— 控制台输出

F5控制台输出结果

会发现,只有当 police.LookAt() 被调用的时候,小偷才跑

否则,小偷都没有任何动作

简单的一个小例子,可直观的看出事件/委托是如何传递不同类之间的调用关系

刑警警察叔叔注视了一下四周
穿黑色衣服的:神偷 - 跑了
穿白色衣服的:笨贼 - 跑了
穿平常色衣服的:平民 - 跑了
穿红色衣服的:强盗 - 跑了

支持

May Be —— 搞开发,总有一天要做的事!

拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!

先点击领取 —— 阿里全产品优惠券 (享受最低优惠)

1 —— 云服务器超全购买流程 (新手必备!)

2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

3—— Windows 服务器配置、运行、建站一条龙 !

4 —— Linux 服务器配置、运行、建站一条龙 !



Chinar


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

转载于:https://www.cnblogs.com/chinarbolg/p/9601423.html

Unity 3D观察者设计模式-C#委托和事件的运用相关推荐

  1. Unity 3D 消息事件系统 NotificationCenter、CEventDispatcher事件分发机制

    版本:unity 5.4.1  语言:C# 实战核心技术这本书来到了第三章,这里给了一个消息事件系统,这是几乎每一个游戏系统都会用到的一个常用技术,非常好用,但如果你add之后忘记remove的话.. ...

  2. Unity Spine动画中Complete 委托 、事件、缓存 += -= 委托

    一.API概念 1.Spine.AnimationState支持的事件: 2.Start:当动画开始播放: 3.End:当动画被清除或中断: 4.Complete:当动画完成它全部的持续时间: 5.E ...

  3. Unity 3D 资源导入 监听导入事件

    API :https://docs.unity3d.com/ScriptReference/AssetPostprocessor.html 常用的: using UnityEditor; using ...

  4. 观察者设计模式 Vs 事件委托(java)

    观察者设计模式 Vs 事件委托 标签: 设计模式 java 事件的委托 转载请注明原博客地址: http://blog.csdn.net/gdutxiaoxu/article/details/5182 ...

  5. Unity 3D委托entrust

    Unity 3D委托的多种用法 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心 ...

  6. unity学习-委托(delegate),事件(event),Action,Func

    unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...

  7. Unity之C#——委托与事件,观察者模式,猫和老鼠事例

    委托与事件,观察者模式,猫和老鼠事例 在Unity游戏开发中,我们经常需要在一个类中,调用另一个类中的方法,比如,当玩家进入到某个地方,敌人就开始攻击玩家.这时就需要利用委托与事件,设计观察者模式. ...

  8. Execution Order of Event Functions, unity 3d 事件函数的执行顺序

    vs_Community.exe --layout "F:\linson\vs2017 comm\offline" --lang zh-CN 学习unity3d,感觉事件顺序很重要 ...

  9. [Unity] ACT 战斗系统学习 1:基于委托的事件管理器

    我觉得看视频太慢了,还是看别人源码更快-- 1.664235822/DarkSouls-Demo Github 源码: https://github.com/664235822/DarkSouls-D ...

最新文章

  1. 我明明只是在努力工作,却被同事说成是“卷王”!!!
  2. [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)
  3. LeetCode 1576. 替换所有的问号
  4. 【boost.asio】不知道ip地址的情况下连接主机的方式
  5. 《Oracle PL/SQL程序设计(第5版)》一一2.5 编辑PL/SQL的环境
  6. uniapp微信小程序获取位置(高德SDK)
  7. jsf入门实例_JSF错误消息示例教程
  8. 分享一个免杀的netcat.exe
  9. 项目开发文档编写规范【附文档模板】
  10. Chrome插件分享—不定期更新
  11. Android 一键加速原理
  12. 伦敦大学计算机研究生雅思要求,伦敦TOP10大学的雅思入学要求来了!
  13. C# 正态分布图 标准偏差 STDEV 概率密度函数 NORM.DIST
  14. 提供资产证券化投行业务的“点石金融”能在中国点石成金吗?
  15. 【分布式】分布式系统概述
  16. 小米电视怎么样?五大标准最有发言权
  17. 简悦+Logseq 搭建本地化个人知识库
  18. 手机里有哪些堪称神器的 APP?
  19. python与建筑地铁结合_Python基础(3)——北京市地铁买票问题(思维练习题)...
  20. 一款好用的tomcat插件---TomcatPlugin插件

热门文章

  1. 电脑pin码忘了登录不进系统_想要大屏打王者,家里电视用不了?投屏到电脑试试...
  2. python笔记之 inputprintformat函数
  3. 解构给默认值_5个 JS 解构有趣的用途
  4. php上传图片完成后的截图,php实现粘贴截图并完成上传功能
  5. idea启动日志在哪里_牛逼了!用 IDEA 扒出了开源组件导致FGC的原因
  6. 查询除了一列意外_想让你的查询语句变快吗?
  7. java 实现自旋锁_java自旋锁的代码实现
  8. html鼠标点击伪类,CSS伪类:CSS3鼠标滑过按钮动画
  9. java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例
  10. java中 d_Java 中的 syncronized 你真的用对了吗