Skip to content

Commit 5cb6c17

Browse files
committed
Update observer pattern examples
1 parent aa4867a commit 5cb6c17

File tree

27 files changed

+122
-148
lines changed

27 files changed

+122
-148
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ dotnet_diagnostic.CA1058.severity = error # CA1058: Types should not extend cert
245245
dotnet_diagnostic.CA1060.severity = error # CA1060: Move P/Invokes to NativeMethods class
246246
dotnet_diagnostic.CA1061.severity = error # CA1061: Do not hide base class methods
247247
dotnet_code_quality.CA1062.exclude_extension_method_this_parameter = true # CA1062: Validate arguments of public methods
248-
dotnet_diagnostic.CA1062.severity = error # CA1062: Validate arguments of public methods
248+
dotnet_diagnostic.CA1062.severity = warning # CA1062: Validate arguments of public methods
249249
dotnet_diagnostic.CA1063.severity = error # CA1063: Implement IDisposable correctly
250250
dotnet_diagnostic.CA1064.severity = error # CA1064: Exceptions should be public
251251
dotnet_diagnostic.CA1065.severity = error # CA1065: Do not raise exceptions in unexpected locations

src/BehavioralPatterns/Observer/ObserverLibrary/Executor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ public override void Execute()
1313
NewspaperExecutor.Execute();
1414
StockExecutor.Execute();
1515
}
16-
}
16+
}

src/BehavioralPatterns/Observer/ObserverLibrary/NewspaperExample/NewspaperExecutor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ public static void Execute()
1111
ConsoleExtension.WriteSeparator("Newspaper example");
1212

1313
var dailyMail = new DailyMail();
14-
dailyMail.Subscribe(new User("Emma Davis", 5));
15-
dailyMail.Subscribe(new User("Mary Miller", 10));
16-
dailyMail.Subscribe(new User("Ube Miller", 6));
14+
dailyMail.Subscribe(new User("Emma Davis", "emma", 5));
15+
dailyMail.Subscribe(new User("Mary Miller", "marry", 10));
16+
dailyMail.Subscribe(new User("Ube Miller", "ube", 6));
1717

1818
Console.WriteLine();
1919
dailyMail.MonthlyPrice = 6;
2020

2121
Console.WriteLine();
2222
dailyMail.MonthlyPrice = 8;
2323
}
24-
}
24+
}

src/BehavioralPatterns/Observer/ObserverLibrary/NewspaperExample/Publishers/Common/Newspaper.cs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,20 @@ namespace ObserverLibrary.NewspaperExample.Publishers.Common;
44

55
public abstract class Newspaper
66
{
7-
private readonly List<IUser> _subscribers;
8-
7+
private readonly Dictionary<string, IUser> _subscribers = new();
98
private readonly string _name;
9+
1010
private decimal _monthlyPrice;
1111

12-
public Newspaper(string name, decimal monthlyPrice)
12+
protected Newspaper(string name, decimal monthlyPrice)
1313
{
14-
_subscribers = new List<IUser>();
15-
1614
_name = name;
1715
_monthlyPrice = monthlyPrice;
1816
}
1917

2018
public decimal MonthlyPrice
2119
{
22-
get
23-
{
24-
return _monthlyPrice;
25-
}
20+
get => _monthlyPrice;
2621
set
2722
{
2823
if (_monthlyPrice != value)
@@ -37,21 +32,21 @@ public decimal MonthlyPrice
3732

3833
public void Subscribe(IUser user)
3934
{
40-
_subscribers.Add(user);
35+
_subscribers.Add(user.Username, user);
4136
Console.WriteLine($"{user.Name} is subscribed to {_name} newspaper.");
4237
}
4338

4439
public void Unsubscribe(IUser user)
4540
{
46-
_subscribers.Remove(user);
41+
_subscribers.Remove(user.Username);
4742
Console.WriteLine($"{user.Name} is unsubscribed from {_name} newspaper.");
4843
}
4944

5045
private void Notify()
5146
{
52-
foreach (IUser user in _subscribers.ToList())
47+
foreach (var user in _subscribers.Values.ToList())
5348
{
5449
user.ReportSubscriptionPriceChange(this);
5550
}
5651
}
57-
}
52+
}

src/BehavioralPatterns/Observer/ObserverLibrary/NewspaperExample/Publishers/DailyMail.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ public DailyMail()
88
: base("Daily Mail", 5)
99
{
1010
}
11-
}
11+
}

src/BehavioralPatterns/Observer/ObserverLibrary/NewspaperExample/Subscribers/Common/IUser.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ namespace ObserverLibrary.NewspaperExample.Subscribers.Common;
44

55
public interface IUser
66
{
7+
public string Username { get; set; }
78
public string Name { get; set; }
89

910
void ReportSubscriptionPriceChange(Newspaper newspaper);
10-
}
11+
}

src/BehavioralPatterns/Observer/ObserverLibrary/NewspaperExample/Subscribers/User.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ public class User : IUser
77
{
88
private readonly decimal _availableMonthlySubscriptionAmount;
99

10-
public User(string name, decimal availableMonthlySubscriptionAmount)
10+
public User(string name, string username, decimal availableMonthlySubscriptionAmount)
1111
{
1212
Name = name;
13+
Username = username;
1314
_availableMonthlySubscriptionAmount = availableMonthlySubscriptionAmount;
1415
}
1516

17+
public string Username { get; set; }
1618
public string Name { get; set; }
1719

1820
public void ReportSubscriptionPriceChange(Newspaper newspaper)
@@ -22,4 +24,4 @@ public void ReportSubscriptionPriceChange(Newspaper newspaper)
2224
newspaper.Unsubscribe(this);
2325
}
2426
}
25-
}
27+
}

src/BehavioralPatterns/Observer/ObserverLibrary/StockExample/Examples/EventAndDelegate/EventAndDelegateExecutor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public static void Execute()
1010
{
1111
ConsoleExtension.WriteSeparator("Stock - event and delegate example");
1212

13-
// Monitor a stock ticker, when particular events occur, react
13+
// Monitor a stock ticker, and react when particular events occur.
1414
var stockTicker = new StockTicker();
1515

1616
// Create new subscribers to listen to the stock ticker
@@ -20,7 +20,7 @@ public static void Execute()
2020
// Load the sample stock data
2121
foreach (Stock stock in StockRepository.GetData())
2222
{
23-
stockTicker.Stock = stock;
23+
stockTicker.ProcessNewStockChange(stock);
2424
}
2525
}
26-
}
26+
}

src/BehavioralPatterns/Observer/ObserverLibrary/StockExample/Examples/EventAndDelegate/Publishers/StockTicker.cs

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,15 @@
22

33
public class StockTicker
44
{
5-
private Stock _stock;
5+
private Stock _lastChangedStock = Stock.Default();
6+
public event EventHandler<StockChangeEventArgs>? StockChange;
67

7-
public event EventHandler<StockChangeEventArgs> StockChange;
8-
9-
public Stock Stock
8+
public void ProcessNewStockChange(Stock stock)
109
{
11-
get
12-
{
13-
return _stock;
14-
}
15-
set
16-
{
17-
_stock = value;
18-
OnStockChange(new StockChangeEventArgs(_stock));
19-
}
10+
_lastChangedStock = stock;
11+
OnStockChange(new StockChangeEventArgs(_lastChangedStock));
2012
}
2113

22-
private void OnStockChange(StockChangeEventArgs e)
23-
{
14+
private void OnStockChange(StockChangeEventArgs e) =>
2415
StockChange?.Invoke(this, e);
25-
}
26-
}
16+
}

src/BehavioralPatterns/Observer/ObserverLibrary/StockExample/Examples/EventAndDelegate/StockChangeEventArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ public StockChangeEventArgs(Stock stock)
88
}
99

1010
public Stock Stock { get; set; }
11-
}
11+
}

0 commit comments

Comments
 (0)