`
wsql
  • 浏览: 11777215 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

.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设计模式,每一步都有注释说明,便于大家理解。 适合新手入门理解什么是委托、事件与Observer设计模式

    详解C#委托,事件,Observer设计模式

    详解C#委托,事件,Observer设计模式 1.将方法作为方法的参数 2.将方法绑定到委托 3.事件的由来 4.事件和委托的编译代码 5.委托、事件与Observer设计模式 6..Net Framework中的委托与事件

    C#中的委托、事件和Observer设计模式使用方法示例

    此文档有助于学习C#委托、事件和Observer设计模式。

    C#中委托与事件的区别

    委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论

    重温Observer模式--热水器·改

    在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式。实际上,不使用委托和事件,一样可以实现Observer模式。在本文中,我将使用GOF的经典方式,再次实现一...

    Observer设计模式实例

    Observer设计模式是一种经典的设计模式,在GOF 23种设计模式种 比较常用于实际。主要是有类指针传递并引用方法和消息传递响应的方法来实现。

    Android学习 ContentProvider数据更新与Observer模式.doc

    Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...

    设计模式C++学习之观察者模式(Observer)

    设计模式C++学习之观察者模式(Observer)

    Observer模式

    NULL 博文链接:https://gary0416.iteye.com/blog/909427

    observer观察者模式

    observer观察者模式

    Observer模式的应用

    请选用适当的设计模式,编写一个股票行情分析软件,随着时间的推移和股票价格的变动,实现各种指标的动态更新(要求至少实现一个股票的分时图和K线图:为降低编程工作量,K线图可以用开盘价、收盘价、最高价、最低价...

    Observer模式的传统实现和AOP实现

    对Observer模式的实现,引入后可直接使用。 包括传统实现和遵循AOP思想的实现

    Observer模式代码实现

    这里面是我根据observer设计模式的原理,自己写的代码!希望能给大家带来帮助!!

    Observer推模式之事件实现

    委托是.Net Framework提供的类型安全的回调机制。委托本质上是类,类里面实现了带有方法指针的构造函数、Invoke、BeginInvoke和...本文重点不在于讨论委托和事件机制,而是通过事件如何方便的实现项目要求的内容。

    C#的委托和事件详解

    委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。

    详解Observer Pattern(观察者模式)在Java中的使用原理

    该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码...

    C++ Observer模式

    23种设计模式之十六(行为模式)Observer模式

    OBserver模式设计实现

    Head First模式设计用的是Java,实现观察者模式使用C++

    Observer与Command模式在VTK类库设计中的应用研究

    Observer与Command模式在VTK类库设计中的应用研究 通过阅读本文档可以熟悉vtk中的重要编程模式

    很详细的描述委托和事件的文档

    委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使 用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。

Global site tag (gtag.js) - Google Analytics