Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Events
- {
- class Program
- {
- static void Main(string[] args)
- {
- WeatherData weatherData = new WeatherData();
- CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
- HeatIndexDisplay heatIndexDisplay = new HeatIndexDisplay(weatherData);
- weatherData.SetMessurements(80, 65, 30.4f);
- Console.WriteLine();
- weatherData.SetMessurements(20, 325, 30.4f);
- Console.WriteLine();
- weatherData.SetMessurements(520, 785, 30.4f);
- Console.ReadKey();
- }
- }
- class HeatIndexDisplay : IObserver, IDisplayElement
- {
- private float _heatIndex;
- private ISubject _weatherData;
- public HeatIndexDisplay(ISubject weatherData)
- {
- _weatherData = weatherData;
- weatherData.registerObserver(this);
- }
- public void Display()
- {
- Console.WriteLine("Ощущается как: " + _heatIndex);
- }
- public void Update(float temperature, float humidity, float pressure)
- {
- _heatIndex = -42.379f + 2.04901523f * temperature + 10.14333127f * humidity -
- 0.22475541f * temperature * humidity - 0.00683783f * temperature * temperature -
- 0.5481717f * humidity * humidity + 0.0122874f * temperature * temperature * humidity +
- 0.00085282f * temperature * humidity * humidity - 0.000000199f * temperature * temperature *
- humidity * humidity;
- Display();
- }
- }
- class CurrentConditionsDisplay : IObserver, IDisplayElement
- {
- private float _temperature;
- private float _humidity;
- private ISubject _weatherData;
- public CurrentConditionsDisplay(ISubject weatherData)
- {
- _weatherData = weatherData;
- weatherData.registerObserver(this);
- }
- public void Display()
- {
- Console.WriteLine("Текущая погода: \nTemperature: " + _temperature +
- "\nHumidity: " + _humidity + "%");
- }
- public void Update(float temperature, float humidity, float pressure)
- {
- _temperature = temperature;
- _humidity = humidity;
- Display();
- }
- }
- interface IObserver
- {
- void Update(float temperature, float humidity, float pressure);
- }
- interface ISubject
- {
- void registerObserver(IObserver observer);
- void removeObserver(IObserver observer);
- void notifyObservers();
- }
- interface IDisplayElement
- {
- void Display();
- }
- class WeatherData : ISubject
- {
- private IObserver[] _observers = new IObserver[0];
- private float _temperature;
- private float _humidity;
- private float _pressure;
- public void notifyObservers()
- {
- foreach (var observer in _observers)
- {
- observer.Update(_temperature, _humidity, _pressure);
- }
- }
- public void registerObserver(IObserver observer)
- {
- IObserver[] newObservers = new IObserver[_observers.Length + 1];
- for(int i = 0; i < _observers.Length; i++)
- {
- newObservers[i] = _observers[i];
- }
- newObservers[newObservers.Length - 1] = observer;
- _observers = newObservers;
- }
- public void removeObserver(IObserver observer)
- {
- int indexRemove = 0;
- for (int i = 0; i < _observers.Length; i++)
- {
- if(_observers[i] == observer)
- {
- indexRemove = i;
- }
- }
- IObserver[] newObservers = new IObserver[_observers.Length - 1];
- int index = 0;
- for (int i = 0; i < newObservers.Length; i++)
- {
- if(index == indexRemove)
- {
- index++;
- }
- newObservers[i] = _observers[i];
- index++;
- }
- _observers = newObservers;
- }
- public void MessurementChanged()
- {
- notifyObservers();
- }
- public void SetMessurements(float temperature, float humidity, float pressure)
- {
- _temperature = temperature;
- _humidity = humidity;
- _pressure = pressure;
- MessurementChanged();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment