观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。在现实生活中的可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用。

实现:比如热水器在烧水的过程中,当水温即将烧开时,会发出报警的声音,显示器上会出现温度监控

转载

转载

转载

static void Main(string[] args)
{ Mouse mouse = new Mouse("米奇", "黄色");
Cat cat = new Cat("米奇", "黄色", mouse);
cat.CatCome();
Console.ReadKey();
}
//被观察者
class Cat
{
private String _name;
private string _color; delegate void MyDelegate();//自定义一个委托类型,该委托可以包装一个没有返回值和参数的方法
private event MyDelegate CatComeEventHandler;//利用委托声明定义一个事件。但是委托和事件并没有本质区别,只是事件不可以在定义它的类外部
//被访问。事件,具有特殊签名的委托。
public Cat(string name, string color, Mouse mouse)
{
this._name = name;
this._color = color;
this.CatComeEventHandler += mouse.MouseRun;//注册事件,将事件指向mouse.MouseRun方法
} public void CatCome()
{
Console.WriteLine("名字为:" + _name + "的小猫叫了一声");
CatComeEventHandler();//利用事件调用被注册的方法。CatCome事件发生,被注册的事件也发生。这就是观察者模式。
}
}
//观察者
class Mouse
{
private String _name;
private String _color;
public Mouse(string name, string color)
{
_name = name;
_color = color;
}
public void MouseRun()
{
Console.WriteLine("名字为:" + _name + "的老鼠开始逃跑了");
}
}

观察者设计模式(C#委托和事件的使用)的更多相关文章

  1. Unity 3D观察者设计模式-C#委托和事件的运用

    C#观察者设计模式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...

  2. C#委托与事件之观察者Observer设计模式

    前言    委托: 委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针. 或委托可以看成一种表示函数的数据类型,类似函数指针. 事件是特殊的委托 观察者模式:两种角色:(1)Subj ...

  3. 转载:C#中委托、事件与Observer设计模式

    原文地址 http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 感谢博主分享! 范例说明 假设 ...

  4. 委托、事件与Observer设计模式

    范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1. ...

  5. Java事件监听机制与观察者设计模式

    一. Java事件监听机制 1. 事件监听三要素: 事件源,事件对象,事件监听器 2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对 ...

  6. Unity3D中使用委托和事件

    前言: 本来早就想写写和代码设计相关的东西了,以前做2DX的时候就有过写写观察者设计模式的想法,但是实践不多.现在转到U3D的怀抱中,倒是接触了不少委托事件的写法,那干脆就在此总结一下吧. 1.C#中 ...

  7. C# 委托和事件 与 观察者模式(发布-订阅模式)讲解 by天命

    使用面向对象的思想 用c#控制台代码模拟猫抓老鼠 我们先来分析一下猫抓老鼠的过程 1.猫叫了 2.所有老鼠听到叫声,知道是哪只猫来了 3.老鼠们逃跑,边逃边喊:"xx猫来了,快跑啊!我是老鼠 ...

  8. [转]大白话系列之C#委托与事件讲解(三)

    本文转自:http://www.cnblogs.com/wudiwushen/archive/2010/04/21/1717378.html [我希望大家在看完文章的时候,多做做练习,自己也可以想个场 ...

  9. .Net之美读书系列(一):委托与事件

    开启新的读书之旅,这次读的书为<.Net之美:.Net关键技术深入解析>. 我是选择性阅读的,把一些自己觉得容易忘记的,或者比较重要的知识点记录下来,以便以后能方便呢查阅. 尊重书本原作者 ...

随机推荐

  1. Linux动态库路径配置

    参考链接:https://blog.csdn.net/blade2001/article/details/32839937 为什么要关注动态库路径配置,是因为工作中遇到动态库依赖其他动态库,而其他动态 ...

  2. 16,div+css的布局较table布局有什么优点?

    改版的时候更加方便,只要改css文件 页面加载速度更快,结构化清晰,页面显示简洁 表现与结构相分离 易于搜索引擎优化,排名更靠前

  3. Jekyll+Github个人博客构建之路

    请参考: http://robotkang.cc/2017/03/HowToCreateBlog/

  4. hadoop学习笔记(二):hdfs优点和缺点

    优点 其中的10k+,指的是每一个块必须>=1M 缺点 低延迟:是指hadoop处理数据都是以分钟为单位的,而不像storm那样的是以毫秒级为单位的. 高吞吐率:是指你分布式存储的文件块的大小必 ...

  5. jQuery选择器的使用注意事项:

    1. 选择其中含有特殊符号 W3C规范规定属性值中不能含有某些特殊字符,但在实际开发过程中,常遇到表达式中含有“#”或“.”等特殊字符的情况,如果按照普通的方式去处理就会出错,解决此类问题的方法就是使 ...

  6. linux python3编译以及 卸载,python默认为python3 ,pip默认为pip3,亲测版

    前置准备yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-de ...

  7. 翻页插件 jquery

    //css <style> * { padding:; margin:; list-style: none; } .wrapper { width: 100%; cursor: point ...

  8. c语言中的qsort用法

    1.首先了解 int cmp(const void* a, const void* b) 表示声明cmp函数,其返回值为int型,参数为两个不可修改(const)的void型指针 2.函数原型 函数声 ...

  9. SpringBoot学习笔记(三)——Springboot配置文件

    SpringBoot不像之前用spring+springMVC做项目的时候,他不需要配置大量的看上去很乱很复杂的xml配置文件.在SpringBoot中你可以通过java代码和注解配置项目,也可以通过 ...

  10. lora

    Lora:特点 距离远,功耗低,不用sim卡和流量,秒级实时性,每秒几十kbps. 阿里与lora: 之前LoRa芯片只有Semtech一家企业掌握着LoRa芯片命脉,人们担心LoRa芯片不够丰富不能 ...