Skip to content

Commit 9a0fb25

Browse files
committed
观察者模式
1 parent 609aee9 commit 9a0fb25

3 files changed

Lines changed: 52 additions & 2 deletions

File tree

DesignPatterns/ObserverPattern/ObserverPattern/Observer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public ConcreteObserver(Subject subject, string observerName)
3939

4040
public override void Update()
4141
{
42-
throw new NotImplementedException();
42+
State = subject.GetState();
43+
Console.WriteLine(observerName+"观察到的状态:"+State);
4344
}
4445
}
4546
}

DesignPatterns/ObserverPattern/ObserverPattern/Program.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ static void Main(string[] args)
2121
spy.SetIntelligence("研制武器!");
2222

2323
spy.Notify();
24+
25+
Subject subject = new ConcreteSubject();
26+
subject.Attach(new ConcreteObserver(subject,"1号观察者"));
27+
subject.Attach(new ConcreteObserver(subject,"2号观察者"));
28+
subject.Attach(new ConcreteObserver(subject,"3号观察者"));
29+
subject.SetState("Talking");
30+
subject.Notify();
2431
}
2532
}
2633
}
Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,55 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Security.Cryptography.X509Certificates;
45
using System.Text;
56
using System.Threading.Tasks;
67

78
namespace ObserverPattern
89
{
910
abstract class Subject
1011
{
11-
private List<Observer>
12+
protected string state;
13+
14+
private List<Observer> listeners =new List<Observer>();
15+
16+
/// <summary>
17+
/// 注册
18+
/// </summary>
19+
/// <param name="observer"></param>
20+
public void Attach(Observer observer)
21+
{
22+
listeners.Add(observer);
23+
}
24+
25+
//反注册
26+
public void Detch(Observer observer)
27+
{
28+
listeners.Remove(observer);
29+
}
30+
31+
public void Notify()
32+
{
33+
foreach (var listener in listeners)
34+
{
35+
listener.Update();
36+
}
37+
}
38+
39+
public abstract void SetState(string state);
40+
public abstract string GetState();
41+
}
42+
43+
class ConcreteSubject : Subject
44+
{
45+
public override void SetState(string state)
46+
{
47+
this.state = state;
48+
}
49+
50+
public override string GetState()
51+
{
52+
return this.state;
53+
}
1254
}
1355
}

0 commit comments

Comments
 (0)