Advertisement
yakovmonarh

Наблюдатель (Observer)

Aug 21st, 2019
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.48 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Linq;
  6.  
  7. class Program
  8. {
  9.    static void Main(string[] args)
  10.    {
  11.     Stock stock = new Stock();
  12.     Bank bank = new Bank("Юнит Банк", stock);
  13.     Brocker brocker = new Brocker("Иваныч", stock);
  14.    
  15.     stock.Market();
  16.    
  17.     brocker.StopTrade();
  18.    
  19.     stock.Market();
  20.    
  21.     Console.ReadLine();
  22.    }
  23. }
  24.  
  25. interface IObserver
  26. {
  27.     void Update(Object obj);
  28. }
  29.  
  30. interface IObservable
  31. {
  32.     void RegisterObserver(IObserver o);
  33.     void RemoveObserver(IObserver o);
  34.     void NotifyObserver();
  35. }
  36.  
  37. class Stock: IObservable
  38. {
  39.     StockInfo info;
  40.    
  41.     List<IObserver> observers;
  42.    
  43.     public Stock()
  44.     {
  45.         observers = new List<IObserver>();
  46.         info = new StockInfo();
  47.     }
  48.    
  49.     public void RegisterObserver(IObserver o)
  50.     {
  51.         observers.Add(o);
  52.     }
  53.    
  54.     public void RemoveObserver(IObserver o)
  55.     {
  56.         observers.Remove(o);
  57.     }
  58.    
  59.     public void NotifyObserver()
  60.     {
  61.         foreach(IObserver n in observers){
  62.             n.Update(info);
  63.         }
  64.     }
  65.    
  66.     public void Market()
  67.     {
  68.         Random rnd = new Random();
  69.         info.USD = rnd.Next(20, 40);
  70.         info.Euro = rnd.Next(30, 50);
  71.         NotifyObserver();
  72.     }
  73. }
  74.  
  75. class StockInfo
  76. {
  77.     public int USD{get;set;}
  78.     public int Euro{get;set;}
  79. }
  80.  
  81. class Brocker: IObserver
  82. {
  83.     public string Name{get;set;}
  84.    
  85.     IObservable stock;
  86.     public Brocker(string name, IObservable obs)
  87.     {
  88.         this.Name = name;
  89.         this.stock = obs;
  90.         this.stock.RegisterObserver(this);
  91.     }
  92.     public void Update(Object obj)
  93.     {
  94.         StockInfo sInfo = (StockInfo)obj;
  95.         if(sInfo.USD > 30)
  96.             Console.WriteLine("Брокер {0} продает доллары;  Курс доллара: {1}", this.Name, sInfo.USD);
  97.         else
  98.             Console.WriteLine("Брокер {0} покупает доллары;  Курс доллара: {1}", this.Name, sInfo.USD);
  99.     }
  100.     public void StopTrade()
  101.     {
  102.         stock.RegisterObserver(this);
  103.         stock = null;
  104.     }
  105. }
  106.    
  107.     class Bank: IObserver
  108.     {
  109.         public string Name{get;set;}
  110.         IObservable stock;
  111.         public Bank(string name, IObservable obj)
  112.         {
  113.             this.Name = name;
  114.             stock = obj;
  115.             stock.RegisterObserver(this);
  116.         }
  117.         public void Update(Object obj)
  118.         {
  119.             StockInfo sInfo = (StockInfo)obj;
  120.             if(sInfo.Euro > 40)
  121.                 Console.WriteLine("Банк {0} продает евро;  Курс евро: {1}", this.Name, sInfo.Euro);
  122.             else
  123.                 Console.WriteLine("Банк {0} покупает евро;  Курс евро: {1}", this.Name, sInfo.Euro);
  124.         }
  125.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement