Skip to content

Commit b4489ea

Browse files
committed
Modifying the observer pattern by adding delegates and event to it
1 parent 65d612a commit b4489ea

5 files changed

Lines changed: 35 additions & 30 deletions

File tree

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
namespace DesignPattern.Observer;
2+
public delegate void Notify(string message);
23

3-
// The Subject
44
public interface IPublisher
55
{
6-
void Subscribe(ISubscriber subscriber);
7-
void UnSubscribe(ISubscriber subscriber);
6+
event Notify OnNotify;
7+
void Subscribe(Notify subscriber);
8+
void UnSubscribe(Notify subscriber);
89
void Notify();
910
}

DesignPattern.Observer/Program.cs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
using DesignPattern.Observer;
22

3-
public class Program
4-
{
5-
public static void Main()
6-
{
7-
var publisher = new Publisher();
3+
var publisher = new Publisher();
84

9-
var subscriber1 = new Subscriber1();
10-
var subscriber2 = new Subscriber2();
5+
var subscriber1 = new Subscriber1();
6+
var subscriber2 = new Subscriber2();
117

12-
publisher.Subscribe(subscriber1);
13-
publisher.Subscribe(subscriber2);
8+
publisher.Subscribe(subscriber1.Update);
9+
publisher.Subscribe(subscriber2.Update);
1410

15-
publisher.PublishPost("New post");
11+
// publisher.OnNotify += subscriber1.Update;
12+
// publisher.OnNotify += subscriber2.Update;
1613

17-
publisher.UnSubscribe(subscriber1);
18-
19-
publisher.PublishPost("New post");
20-
}
21-
}
14+
//
15+
publisher.PublishPost("New post published!!");
16+
//
17+
publisher.UnSubscribe(subscriber1.Update);
18+
// // publisher.OnNotify -= subscriber1.Update;
19+
publisher.PublishPost("Another post published!!");
Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
11
namespace DesignPattern.Observer;
22

33

4+
45
public class Publisher : IPublisher
56
{
6-
private readonly List<ISubscriber> _subscribers = [];
7+
// private readonly List<ISubscriber> _subscribers = [];
78

8-
private string _state; // Can be anything that happens or gets updated
9+
private string _state;
10+
public event Notify? OnNotify;
911

10-
public void Subscribe(ISubscriber member)
12+
public void Subscribe(Notify subscriber)
1113
{
1214
Console.WriteLine("the subscriber has subscribed...");
13-
_subscribers.Add(member);
15+
// _subscribers.Add(member);
16+
OnNotify += subscriber;
1417
}
1518

16-
public void UnSubscribe(ISubscriber member)
19+
public void UnSubscribe(Notify subscriber)
1720
{
1821
Console.WriteLine("the subscriber has unsubscribed...");
19-
_subscribers.Remove(member);
22+
// _subscribers.Remove(member);
23+
OnNotify -= subscriber;
2024
}
2125

2226
public void PublishPost(string state)
@@ -27,9 +31,11 @@ public void PublishPost(string state)
2731

2832
public void Notify()
2933
{
30-
foreach (var member in _subscribers)
31-
{
32-
member.Update(_state);
33-
}
34+
OnNotify?.Invoke(_state);
35+
// foreach (var member in _subscribers)
36+
// {
37+
// Console.WriteLine();
38+
// // member.Update(_state);
39+
// }
3440
}
3541
}

DesignPattern.Observer/Subscriber1.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public void Update(string state)
1212

1313
private void GetNotify()
1414
{
15-
Console.WriteLine($"Subscriber1 was notified - {_state}");
15+
Console.WriteLine($"Subscriber 1 was notified - {_state}");
1616
}
1717
}

DesignPattern.Observer/Subscriber2.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public void Update(string state)
1212

1313
private void GetNotify()
1414
{
15-
Console.WriteLine($"Subscriber2 was notified - {_state}");
15+
Console.WriteLine($"Subscriber 2 was notified - {_state}");
1616
}
1717
}

0 commit comments

Comments
 (0)