Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading;
- using System.Linq;
- class Program
- {
- static void Main(string[] args)
- {
- Stock stock = new Stock();
- Bank bank = new Bank("Юнит Банк", stock);
- Brocker brocker = new Brocker("Иваныч", stock);
- stock.Market();
- brocker.StopTrade();
- stock.Market();
- Console.ReadLine();
- }
- }
- interface IObserver
- {
- void Update(Object obj);
- }
- interface IObservable
- {
- void RegisterObserver(IObserver o);
- void RemoveObserver(IObserver o);
- void NotifyObserver();
- }
- class Stock: IObservable
- {
- StockInfo info;
- List<IObserver> observers;
- public Stock()
- {
- observers = new List<IObserver>();
- info = new StockInfo();
- }
- public void RegisterObserver(IObserver o)
- {
- observers.Add(o);
- }
- public void RemoveObserver(IObserver o)
- {
- observers.Remove(o);
- }
- public void NotifyObserver()
- {
- foreach(IObserver n in observers){
- n.Update(info);
- }
- }
- public void Market()
- {
- Random rnd = new Random();
- info.USD = rnd.Next(20, 40);
- info.Euro = rnd.Next(30, 50);
- NotifyObserver();
- }
- }
- class StockInfo
- {
- public int USD{get;set;}
- public int Euro{get;set;}
- }
- class Brocker: IObserver
- {
- public string Name{get;set;}
- IObservable stock;
- public Brocker(string name, IObservable obs)
- {
- this.Name = name;
- this.stock = obs;
- this.stock.RegisterObserver(this);
- }
- public void Update(Object obj)
- {
- StockInfo sInfo = (StockInfo)obj;
- 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.RegisterObserver(this);
- stock = null;
- }
- }
- class Bank: IObserver
- {
- public string Name{get;set;}
- IObservable stock;
- public Bank(string name, IObservable obj)
- {
- this.Name = name;
- stock = obj;
- stock.RegisterObserver(this);
- }
- public void Update(Object obj)
- {
- StockInfo sInfo = (StockInfo)obj;
- if(sInfo.Euro > 40)
- Console.WriteLine("Банк {0} продает евро; Курс евро: {1}", this.Name, sInfo.Euro);
- else
- Console.WriteLine("Банк {0} покупает евро; Курс евро: {1}", this.Name, sInfo.Euro);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement