利用委托实现观察者模式
1
using System;
2
using System.Collections;
3
using System.Collections.Generic;
4![]()
5
public class MyClass
6
{
7
public static void Main()
8
{
9
Mouse m = new Mouse();
10
People p = new People();
11
12
HandleDelegate m_h = new HandleDelegate(m.Run);
13
HandleDelegate p_h = new HandleDelegate(p.Wakeup);
14
15
Observer ob = new Observer();
16
ob.AddObserver(m_h);
17
ob.AddObserver(p_h);
18
Cat cat = new Cat(ob);
19
cat.Cry();
20
ob.RemoveObserver(p_h);
21
cat.Cry();
22
RL();
23
}
24
25
Helper methods
43
}
44![]()
45![]()
46
public delegate void HandleDelegate();
47![]()
48
public class Cat
49
{
50
private Observer ob;
51
52
public Cat(Observer _ob)
53
{
54
ob = _ob;
55
}
56
57
public void Cry()
58
{
59
Console.WriteLine("Cat cry
.");
60
ob.Do();
61
}
62
}
63![]()
64
public class Mouse
65
{
66
public void Run()
67
{
68
Console.WriteLine("Runing
.");
69
}
70
}
71![]()
72
public class People
73
{
74
public void Wakeup()
75
{
76
Console.WriteLine("Wakeup
");
77
}
78
}
79![]()
80
public class Observer
81
{
82
private IList<HandleDelegate> list = null;
83
84
public Observer()
85
{
86
list = new List<HandleDelegate>();
87
}
88
89
public void AddObserver(HandleDelegate h)
90
{
91
list.Add(h);
92
}
93
public void RemoveObserver(HandleDelegate h)
94
{
95
if(list.Contains(h))
96
{
97
list.Remove(h);
98
}
99
else
100
return;
101
}
102
103
public void Do()
104
{
105
foreach(HandleDelegate h in list)
106
{
107
h();
108
}
109
}
110
111
}
using System;2
using System.Collections;3
using System.Collections.Generic;4

5
public class MyClass6
{7
public static void Main()8
{9
Mouse m = new Mouse();10
People p = new People();11
12
HandleDelegate m_h = new HandleDelegate(m.Run);13
HandleDelegate p_h = new HandleDelegate(p.Wakeup);14
15
Observer ob = new Observer();16
ob.AddObserver(m_h);17
ob.AddObserver(p_h);18
Cat cat = new Cat(ob);19
cat.Cry();20
ob.RemoveObserver(p_h);21
cat.Cry();22
RL();23
}24
25
Helper methods43
}44

45

46
public delegate void HandleDelegate();47

48
public class Cat49
{50
private Observer ob;51
52
public Cat(Observer _ob)53
{54
ob = _ob;55
}56
57
public void Cry()58
{59
Console.WriteLine("Cat cry
.");60
ob.Do();61
}62
}63

64
public class Mouse65
{66
public void Run()67
{68
Console.WriteLine("Runing
.");69
}70
}71

72
public class People73
{74
public void Wakeup()75
{76
Console.WriteLine("Wakeup
");77
}78
}79

80
public class Observer81
{82
private IList<HandleDelegate> list = null;83
84
public Observer()85
{86
list = new List<HandleDelegate>(); 87
}88
89
public void AddObserver(HandleDelegate h)90
{91
list.Add(h);92
}93
public void RemoveObserver(HandleDelegate h)94
{95
if(list.Contains(h))96
{97
list.Remove(h);98
}99
else100
return;101
}102
103
public void Do()104
{105
foreach(HandleDelegate h in list)106
{107
h();108
}109
}110
111
}面试的时候遇到这样一个问题,整理下
posted on 2007-03-09 17:03 flyingchen 阅读(405) 评论(2) 收藏 举报

浙公网安备 33010602011771号