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)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
ObserverPatternExamples.Run();
|
||||||
|
Console.ReadKey();
|
||||||
//Chain of responsibillity
|
//Chain of responsibillity
|
||||||
//This is usefull when you have a request and you don't know who should process it
|
//This is usefull when you have a request and you don't know who should process it
|
||||||
ChainOfResponsibillityExamples.Run();
|
ChainOfResponsibillityExamples.Run();
|
||||||
@@ -40,8 +42,6 @@ namespace BehavioralPatterns
|
|||||||
|
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
|
|
||||||
ObserverPatternExamples.Run();
|
|
||||||
Console.ReadKey();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,12 +19,22 @@ namespace ObserverPattern
|
|||||||
StockUpdateEventsExample stockExample = new StockUpdateEventsExample();
|
StockUpdateEventsExample stockExample = new StockUpdateEventsExample();
|
||||||
stockExample.RunSimple();
|
stockExample.RunSimple();
|
||||||
|
|
||||||
GoToNextStep();
|
GoToNextStep();
|
||||||
Console.WriteLine("Same business logic using RX");
|
|
||||||
stockExample.RunReactive();
|
|
||||||
|
|
||||||
Console.WriteLine(GetLapsedLinstenerProblem());
|
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();
|
ObservableTwitsExample obsTwits = new ObservableTwitsExample();
|
||||||
obsTwits.Run();
|
obsTwits.Run();
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Reactive.Subjects;
|
||||||
|
|
||||||
namespace ObserverPattern.StockUpdateEvents
|
namespace ObserverPattern.StockUpdateEvents
|
||||||
{
|
{
|
||||||
@@ -7,12 +8,12 @@ namespace ObserverPattern.StockUpdateEvents
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class StockSubject
|
public class StockSubject
|
||||||
{
|
{
|
||||||
|
|
||||||
public void UpdateStockValue(Stock s)
|
public void UpdateStockValue(Stock s)
|
||||||
{
|
{
|
||||||
StockUpdated?.Invoke(this, new StockUpdateEventArgs(s));
|
StockUpdated?.Invoke(this, new StockUpdateEventArgs(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
public event EventHandler<StockUpdateEventArgs> StockUpdated;
|
public event EventHandler<StockUpdateEventArgs> StockUpdated;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reactive;
|
using System.Reactive;
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
|
using System.Reactive.Subjects;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace ObserverPattern.StockUpdateEvents
|
namespace ObserverPattern.StockUpdateEvents
|
||||||
@@ -20,7 +21,7 @@ namespace ObserverPattern.StockUpdateEvents
|
|||||||
PublishUpdateStocks(stockSubject);
|
PublishUpdateStocks(stockSubject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RunReactive()
|
public void RunReactiveWithEvents()
|
||||||
{
|
{
|
||||||
StockSubject stockSubject = new StockSubject();
|
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)
|
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)
|
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)
|
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 = 2 });
|
||||||
stockSubject.UpdateStockValue(new Stock { Name = "FTSE", Value = 3 });
|
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