.net框架下的事件和委托理解起来比较困难,特别是委托这个特殊的类型学习起来总是要花点时间。
下面结合Observer模式做了一个简单的例子,希望对初学者有帮助。
首先建一个控制台应用程序。代码如下 :
Program.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace ObserverPattern
{
/// <summary>
/// 声明一个委托类型(即函数模板,指向函数的地址,.net五大类型之一)
/// </summary>
public delegate void PersonEventHandler();
/// <summary>
/// 声明一个观察者
/// </summary>
public class Light
{
private Person person = null;
public Light(Person p)
{
person = p;
person.backOrOut += new PersonEventHandler(p_backOrOut);
}
private void p_backOrOut()
{
if (person.Dir .ToUpper() == "OUT")
{
Console.WriteLine("你要出去,灯会自动熄灭的。");
}
else if (person.Dir .ToUpper() == "BACK")
{
Console.WriteLine("当您回到家的时候,灯会自动亮起来。");
}
}
}
/// <summary>
/// 声明一个主体
/// </summary〉
public class Person
{
private string dir;
public string Dir
{
get
{
return dir;
}
set
{
dir = value;
}
}
public Person(string dir)
{
this.dir = dir;
}
//声明一个事件(即委托类型的变量)
public event PersonEventHandler backOrOut;
public void OnBackOrOut()
{
if (backOrOut != null)
{
//执行事件(即委托邦定的函数)
backOrOut();
}
}
}
/// <summary>
/// 主程序
/// </summary>
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请选择你是要出去还是回家,出去请输入out,回家请输入back。");
string dir =Console .ReadLine();
do
{
Person p = new Person( dir);
Light l = new Light(p);
p.OnBackOrOut();
Console.WriteLine("请选择你是要出去还是回家,出去请输入out,回家请输入back。");
dir = Console.ReadLine();
} while (dir != "exit");
}
}
}
在.net框架下的事件与委托下,理解Observer应该容易一些。
分享到:
相关推荐
以实例方式详细讲述了委托、事件与Observer设计模式,每一步都有注释说明,便于大家理解。 适合新手入门理解什么是委托、事件与Observer设计模式
详解C#委托,事件,Observer设计模式 1.将方法作为方法的参数 2.将方法绑定到委托 3.事件的由来 4.事件和委托的编译代码 5.委托、事件与Observer设计模式 6..Net Framework中的委托与事件
此文档有助于学习C#委托、事件和Observer设计模式。
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论
在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式。实际上,不使用委托和事件,一样可以实现Observer模式。在本文中,我将使用GOF的经典方式,再次实现一...
Observer设计模式是一种经典的设计模式,在GOF 23种设计模式种 比较常用于实际。主要是有类指针传递并引用方法和消息传递响应的方法来实现。
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
设计模式C++学习之观察者模式(Observer)
NULL 博文链接:https://gary0416.iteye.com/blog/909427
observer观察者模式
请选用适当的设计模式,编写一个股票行情分析软件,随着时间的推移和股票价格的变动,实现各种指标的动态更新(要求至少实现一个股票的分时图和K线图:为降低编程工作量,K线图可以用开盘价、收盘价、最高价、最低价...
对Observer模式的实现,引入后可直接使用。 包括传统实现和遵循AOP思想的实现
这里面是我根据observer设计模式的原理,自己写的代码!希望能给大家带来帮助!!
委托是.Net Framework提供的类型安全的回调机制。委托本质上是类,类里面实现了带有方法指针的构造函数、Invoke、BeginInvoke和...本文重点不在于讨论委托和事件机制,而是通过事件如何方便的实现项目要求的内容。
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码...
23种设计模式之十六(行为模式)Observer模式
Head First模式设计用的是Java,实现观察者模式使用C++
Observer与Command模式在VTK类库设计中的应用研究 通过阅读本文档可以熟悉vtk中的重要编程模式
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使 用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。