`
wyf
  • 浏览: 435614 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

标准的C#观察者(observer)模式

阅读更多
using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate {
       // 热水器
       public class Heater {
              private int temperature;
              public string type = “RealFire 001″;              // 添加型号作为演示
              public string area = “China Xian”;                     // 添加产地作为演示
              //声明委托
              public delegate void BoiledEventHandler(Object sender, BoliedEventArgs e);
              public event BoiledEventHandler Boiled;       //声明事件 

              // 定义BoliedEventArgs类,传递给Observer所感兴趣的信息
              public class BoliedEventArgs : EventArgs {
                     public readonly int temperature;
                     public BoliedEventArgs(int temperature) {
                            this.temperature = temperature;
                     }
              } 

              // 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
              protected virtual void OnBolied(BoliedEventArgs e) {
                     if (Boiled != null) {       // 如果有对象注册
                            Boiled(this, e);       // 调用所有注册对象的方法
                     }
              }
              
              // 烧水。
              public void BoilWater() {
                     for (int i = 0; i <= 100; i++) {
                            temperature = i;
                            if (temperature > 95) {
                                   //建立BoliedEventArgs 对象。
                                   BoliedEventArgs e = new BoliedEventArgs(temperature); .
                                   OnBolied(e);       // 调用 OnBolied方法
                            }
                     }
              }
       }

       // 警报器
       public class Alarm {
              public void MakeAlert(Object sender, Heater.BoliedEventArgs e) {
                     Heater heater = (Heater)sender;              //这里是不是很熟悉呢?
                     //访问 sender 中的公共字段
                     Console.WriteLine(”Alarm:{0} - {1}: “, heater.area, heater.type);
                     Console.WriteLine(”Alarm: 嘀嘀嘀,水已经 {0} 度了:”, e.temperature); 
                     Console.WriteLine();
              } 

       }
       // 显示器
       public class Display {
              public static void ShowMsg(Object sender, Heater.BoliedEventArgs e) {       //静态方法
                     Heater heater = (Heater)sender;
                     Console.WriteLine(”Display:{0} - {1}: “, heater.area, heater.type);
                     Console.WriteLine(”Display:水快烧开了,当前温度:{0}度。”, e.temperature);
                     Console.WriteLine();
              }
       }

       class Program {
              static void Main() {
                     Heater heater = new Heater();
                     Alarm alarm = new Alarm();

                     heater.Boiled += alarm.MakeAlert;       //注册方法
                     heater.Boiled += (new Alarm()).MakeAlert;              //给匿名对象注册方法
                     heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert);       //也可以这么注册
                     heater.Boiled += Display.ShowMsg;              //注册静态方法 

                     heater.BoilWater();       //烧水,会自动调用注册过对象的方法
              }
       }
}

Www_
 

输出为:

以下为引用的内容:
Alarm:China Xian - RealFire 001:
Alarm: 嘀嘀嘀,水已经 96 度了:
Alarm:China Xian - RealFire 001:
Alarm: 嘀嘀嘀,水已经 96 度了:
Alarm:China Xian - RealFire 001:
Alarm: 嘀嘀嘀,水已经 96 度了:
Display:China Xian - RealFire 001:
Display:水快烧开了,当前温度:96度。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fdsa123456/archive/2009/02/11/3877678.aspx

 

分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    委托实现C#观察者模式简单例子

    现在,让我们逐步构建这个简单的C#观察者模式实例: 1. **定义委托** 首先,我们需要定义一个委托类型,表示观察者应该执行的操作。例如: ```csharp public delegate void StateChangedEventHandler(object ...

    C# 观察者模式实例

    观察者模式是软件设计模式中的一种行为模式,它在面向对象编程中扮演着重要的角色,尤其是在C#这样的语言中。观察者模式的核心思想是定义一个一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象...

    用C#实现观察者模式

    在C#中,我们可以利用.NET框架提供的事件和委托机制来实现观察者模式。本文将深入探讨如何使用C#来实现这一模式。 首先,我们需要理解观察者模式的基本组件:主题(Subject)和观察者(Observer)。主题是被观察的...

    接口实现C#观察者模式简单例子

    在C#编程中,观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这个模式广泛应用于事件驱动编程,例如GUI系统、多线程通信等...

    设计模式之观察者模式(Observer Pattern)

    在Java、C#等面向对象编程语言中,观察者模式被广泛应用于用户界面、事件处理、游戏编程等领域。 在观察者模式中,通常有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它持有一个观察...

    浅谈观察者模式及在C#中的实现

    ### 观察者模式及其在C#中的应用 #### 观察者模式的目的与概述 观察者模式(Observer Pattern)是一种行为设计模式,其主要目的是解决面向对象设计中常见的问题——如何实现对象间的解耦,使得一个对象的状态改变...

    C#设计模式—观察者模式应用实例

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在C#中,我们可以利用.NET框架提供的...

    Observer模式

    同时,还可以探索其他编程语言中对观察者模式的支持,如C#的System.ComponentModel.INotifyPropertyChanged接口,或者是JavaScript的事件监听机制。 在开发工具中,Observer模式也有广泛应用。例如,IDE(集成开发...

    观察者模式(Observer)

    在Java、C#等面向对象语言中,观察者模式是标准库的一部分,通常通过事件或委托来实现。 观察者模式的核心组件包括主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何具有可变状态的对象;...

    C# 观察者模式实例介绍

    这种方式更符合C#的编程风格,通过事件订阅和触发,同样可以达到观察者模式的效果,但代码结构有所不同,不再直接继承自`Observer`,而是定义事件处理方法(如`CloseStockMarket`或`CloseNBA`)。 使用观察者模式有...

    观察者模式Demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动编程,使得多...

    (行为型模式) Observer 观察者模式

    C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载

    C#观察者模式(Observer Pattern)实例教程

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在C#中,这种模式经常用于事件处理,使得对象之间可以松散耦合地交互。下面...

    C#观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许对象在状态改变时通知其他依赖该对象的对象。在C#中,观察者模式主要通过事件(Event)和委托(Delegate)机制来实现,这使得对象之间的耦合度...

    观察者(Observer)模式详解

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    Observer设计模式实例

    在Observer模式中,主要有两个关键角色:Subject(主题)和Observer(观察者)。Subject维护了一个Observer的列表,并负责在状态变化时通知它们。Observer则关注Subject,当Subject状态变化时,Observer会收到通知并...

    C#的观察者模式实例

    在这个“C#的观察者模式实例”中,我们将探讨如何在C#中实现这一模式,并通过天气预报的功能进行说明。 观察者模式的核心思想是定义一个一对多的依赖关系,当一个对象(主题)的状态发生改变时,所有依赖于它的对象...

    Observer(观察者模式)学习源码

    除了Java标准库中的实现,许多其他编程语言和框架也提供了内置的观察者支持,如JavaScript的EventEmitter、C#的Event和委托、或者在Spring框架中的ApplicationEvent和ApplicationListener。 在实际项目中,观察者...

Global site tag (gtag.js) - Google Analytics