您的位置:首页 > 其它

结合事件与委托学习Observer模式

2008-05-13 11:02 267 查看
.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应该容易一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: