Add RX variance to Stocks example on Observer pattern

This commit is contained in:
Petrutiu Mihai
2016-06-28 17:59:13 +03:00
parent 5d639bf0ab
commit 55ed135ee1
4 changed files with 58 additions and 9 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Reactive.Subjects;
namespace ObserverPattern.StockUpdateEvents
{
@@ -7,12 +8,12 @@ namespace ObserverPattern.StockUpdateEvents
/// </summary>
public class StockSubject
{
public void UpdateStockValue(Stock s)
{
StockUpdated?.Invoke(this, new StockUpdateEventArgs(s));
}
public event EventHandler<StockUpdateEventArgs> StockUpdated;
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Reactive;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using System.Threading.Tasks;
namespace ObserverPattern.StockUpdateEvents
@@ -20,7 +21,7 @@ namespace ObserverPattern.StockUpdateEvents
PublishUpdateStocks(stockSubject);
}
public void RunReactive()
public void RunReactiveWithEvents()
{
StockSubject stockSubject = new StockSubject();
@@ -39,14 +40,38 @@ namespace ObserverPattern.StockUpdateEvents
}
}
public void RunReactive()
{
Subject<Stock> stockSubject = new Subject<Stock>();
var londonObserver = stockSubject.Where(s => s.Name == "FTSE");
var aaplObserver = stockSubject.Where(s => s.Name == "AAPL");
using (londonObserver.Subscribe(PrintLondonStockPriceUpdate))
using (aaplObserver.Subscribe(PrintAaplStockPriceUpdate))
{
PublishUpdateStocks(stockSubject);
}
}
private void PrintAaplStockPriceUpdate(EventPattern<StockUpdateEventArgs> eventP)
{
Console.WriteLine("apple updated, new value: {0}", eventP.EventArgs.Stock.Value);
PrintAaplStockPriceUpdate(eventP.EventArgs.Stock);
}
private void PrintAaplStockPriceUpdate(Stock stock)
{
Console.WriteLine("apple updated, new value: {0}", stock.Value);
}
private void PrintLondonStockPriceUpdate(EventPattern<StockUpdateEventArgs> eventP)
{
Console.WriteLine("london stock updated, new value: {0}", eventP.EventArgs.Stock.Value);
PrintLondonStockPriceUpdate(eventP.EventArgs.Stock);
}
private void PrintLondonStockPriceUpdate(Stock stock)
{
Console.WriteLine("london stock updated, new value: {0}", stock.Value);
}
private static void PublishUpdateStocks(StockSubject stockSubject)
@@ -61,5 +86,18 @@ namespace ObserverPattern.StockUpdateEvents
stockSubject.UpdateStockValue(new Stock { Name = "FTSE", Value = 2 });
stockSubject.UpdateStockValue(new Stock { Name = "FTSE", Value = 3 });
}
private static void PublishUpdateStocks(Subject<Stock> stockSubject)
{
stockSubject.OnNext(new Stock { Name = "AAPL", Value = 3 });
stockSubject.OnNext(new Stock { Name = "AAPL", Value = 4 });
stockSubject.OnNext(new Stock { Name = "AAPL", Value = 5 });
stockSubject.OnNext(new Stock { Name = "AAPL", Value = 6 });
stockSubject.OnNext(new Stock { Name = "FTSE", Value = 6 });
stockSubject.OnNext(new Stock { Name = "FTSE", Value = 12 });
stockSubject.OnNext(new Stock { Name = "FTSE", Value = 2 });
stockSubject.OnNext(new Stock { Name = "FTSE", Value = 3 });
}
}
}