Паттерн наблюдатель - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Observer { class Program { static void Main(string[] args) { Stock stock = new Stock(); // фонд Bank bank = new Bank("ЮнитБанк", stock); Broker broker = new Broker("Иван Иваныч", stock); // имитация торгов stock.Market(); // брокер прекращает наблюдать за торгами broker.StopTrade(); // имитация торгов stock.Market(); Console.Read(); } } interface IObserver { void Update(Object ob); } interface IObservable { void RegisterObserver(IObserver o); void RemoveObserver(IObserver o); void NotifyObservers(); } class Stock : IObservable { StockInfo sInfo; // информация о торгах List<IObserver> observers; public Stock() // конструктор { observers = new List<IObserver>(); sInfo = new StockInfo(); } public void RegisterObserver(IObserver o) // метод { observers.Add(o); } public void RemoveObserver(IObserver o) { observers.Remove(o); } public void NotifyObservers() // регистрировать { foreach (IObserver o in observers) { o.Update(sInfo); } } public void Market() { Random rnd = new Random(); sInfo.USD = rnd.Next(20, 40); sInfo.Euro = rnd.Next(30, 50); NotifyObservers(); } } class StockInfo { public int USD; //{ get; set; } public int Euro; //{ get; set; } } class Broker : IObserver { public string Name { get; set; } IObservable stock; public Broker(string name, IObservable obs) { this.Name = name; stock = obs; stock.RegisterObserver(this); } public void Update(object ob) { StockInfo sInfo = (StockInfo)ob; if (sInfo.USD > 30) Console.WriteLine("Брокер {0} продает доллары; Курс доллара: {1}", this.Name, sInfo.USD); else Console.WriteLine("Брокер {0} покупает доллары; Курс доллара: {1}", this.Name, sInfo.USD); } public void StopTrade() { stock.RemoveObserver(this); stock = null; } } class Bank : IObserver { public string Name { get; set; } IObservable stock; public Bank(string name, IObservable obs) { this.Name = name; stock = obs; stock.RegisterObserver(this); } public void Update(object ob) { StockInfo sInfo = (StockInfo)ob; if (sInfo.Euro > 40) Console.WriteLine("Банк {0} продает евро; Курс евро: {1}", this.Name, sInfo.Euro); else Console.WriteLine("Банк {0} покупает евро; Курс евро: {1}", this.Name, sInfo.Euro); } } }
Здравствуйте ! Подскажите пожалуйста , в этой программе (программа рабочая )
откуда берется значение sInfo в 64 строке ?
Решение задачи: «Паттерн наблюдатель»
textual
Листинг программы
Stock stock = new Stock(); // фонд Bank bank = new Bank("ЮнитБанк"); Broker broker = new Broker("Иван Иваныч", stock); stock.MarketChanged += bank.Update; stock.MarketChanged += broker.Update; // имитация торгов stock.Market(); // брокер прекращает наблюдать за торгами broker.StopTrade(); // если явно убрать, то это ничего не сломает stock.MarketChanged -= broker.Update; // имитация торгов stock.Market(); Console.ReadKey();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д