结合事件与委托学习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应该容易一些。
下面结合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应该容易一些。
相关文章推荐
- [学习笔记]c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- 委托的应用之二:使用多播委托编码Observer模式。以及事件的引入
- 委托, 匿名委托, Lambda表达式, 事件的本质, 以及Observer模式.
- 委托、事件与Observer设计模式
- 委托、事件与Observer设计模式
- 初识c#---委托,事件和观察者模式(Observer)设计模式
- 转载:C#中委托、事件与Observer设计模式
- C# 中的委托和事件_Observer设计模式[转]
- 委托、事件与Observer设计模式
- 使用委托和事件实现观察者模式(Observer Pattern)
- 委托、事件与Observer设计模式
- Observer 设计模式 了解委托与事件的使用
- c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- 委托、事件与Observer设计模式
- 委托、事件与Observer设计模式
- c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- 委托、事件与Observer设计模式
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- C#,由委托到Observer设计模式,再到事件机制
- Observer 设计模式(委托和事件的使用)