zoukankan      html  css  js  c++  java
  • c# Observers模式 示例

    用于显示数据的接口定义:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Observers
    {
    interface IDisplay
    {
    void Display();
    }
    }
    天气数据类接口定义
    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Observers { interface IWatherData { void AddObserver(IObservers o); void DelObserver(IObservers o); void SetWatherData(int Temperature, int Humidity); } }
     
    观察者接口定义:
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Observers
    {
    interface IObservers
    {
    void update(int Temperature, int Humidity);
    }
    }

    天气数据类的实现:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;

    namespace Observers
    {
    class WatherData:IWatherData
    {
    private int Temperature = 0;
    private int Humidity = 0;
    private ArrayList observers;
    public WatherData()
    {
    observers = new ArrayList();
    }

    public void AddObserver(IObservers o)
    {
    observers.Add(o);
    }

    public void DelObserver(IObservers o)
    {
    if (observers.IndexOf(o) > 0)
    {
    observers.RemoveAt(observers.IndexOf(o));
    }
    }

    public void SetWatherData(int intTemperature, int intHumidity)
    {
    Temperature = intTemperature;
    Humidity = intHumidity;
    WatherDataChanged();
    }

    public void WatherDataChanged()
    {
    for (int i = 0; i < observers.Count; i++)
    {
    ((IObservers)observers[i]).update(Temperature, Humidity);
    }
    }
    }
    }

    观察者类的实现:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Observers
    {
    class Observer1:IObservers,IDisplay
    {
    private int intTemperature;
    private int intHumidity;
    public void update(int Temperature, int Humidity)
    {
    intTemperature = Temperature;
    intHumidity = Humidity;
    Display();
    }

    public void Display()
    {
    Console.WriteLine("Observer1:Temperature=" + intTemperature + ",Humidity=" + intHumidity);
    }
    }
    }

    主方法调用:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Observers
    {
    class Program
    {
    static void Main(string[] args)
    {
    IWatherData watherdata = new WatherData();
    IObservers observer1 = new Observer1();
    watherdata.AddObserver(observer1);
    watherdata.SetWatherData(100,200);
    watherdata.SetWatherData(200, 100);
    Console.ReadKey();
    }
    }
    }


     

  • 相关阅读:
    关于子类中不能调用基类中定义的事件问题
    比尔·盖茨在哈佛大学毕业典礼上的演讲
    一个QA讲解的回文判断函数
    mybatis和spring整合时这个报错,应该这样解决!
    “老师,为什么我一上课就感到困,听课听的总是走神?”
    最好的方法,是为你们量身定制!
    “桌面日历”记录的事件居然是看某某视频……
    干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
    越优秀的人越努力,越努力的人越幸运!
    挺不喜欢下雪的
  • 原文地址:https://www.cnblogs.com/wangjingblogs/p/2205287.html
Copyright © 2011-2022 走看看