Add RX variance to Stocks example on Observer pattern
This commit is contained in:
@@ -15,6 +15,8 @@ namespace BehavioralPatterns
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
ObserverPatternExamples.Run();
|
||||
Console.ReadKey();
|
||||
//Chain of responsibillity
|
||||
//This is usefull when you have a request and you don't know who should process it
|
||||
ChainOfResponsibillityExamples.Run();
|
||||
@@ -40,8 +42,6 @@ namespace BehavioralPatterns
|
||||
|
||||
Console.ReadKey();
|
||||
|
||||
ObserverPatternExamples.Run();
|
||||
Console.ReadKey();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,12 +19,22 @@ namespace ObserverPattern
|
||||
StockUpdateEventsExample stockExample = new StockUpdateEventsExample();
|
||||
stockExample.RunSimple();
|
||||
|
||||
GoToNextStep();
|
||||
Console.WriteLine("Same business logic using RX");
|
||||
stockExample.RunReactive();
|
||||
GoToNextStep();
|
||||
|
||||
Console.WriteLine(GetLapsedLinstenerProblem());
|
||||
|
||||
GoToNextStep();
|
||||
|
||||
Console.WriteLine("Same business logic using events combined with RX library");
|
||||
stockExample.RunReactiveWithEvents();
|
||||
|
||||
GoToNextStep();
|
||||
|
||||
Console.WriteLine("Same business logic using RX library");
|
||||
stockExample.RunReactive();
|
||||
|
||||
GoToNextStep();
|
||||
|
||||
ObservableTwitsExample obsTwits = new ObservableTwitsExample();
|
||||
obsTwits.Run();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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 });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user