程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)要求:
1.要有联动性,老鼠和主人的行为是被动的。
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
要点:
1. 联动效果,运行代码只要执行Cat.Cryed()方法。
2. 对老鼠和主人进行抽象
评分标准:
<1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)
出题者给出的答案……
1
6
public interface Observer
7
{
8
void Response(); //观察者的响应,如是老鼠见到猫的反映
9
}
10
public interface Subject
11
{
12
void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
13
}
14
public class Mouse : Observer
15
{
16
private string name;
17
public Mouse(string name, Subject subj)
18
{
19
this.name = name;
20
subj.AimAt(this);
21
}
22
23
public void Response()
24
{
25
Console.WriteLine(name + " attempt to escape!");
26
}
27
}
28
public class Master : Observer
29
{
30
public Master(Subject subj)
31
{
32
subj.AimAt(this);
33
}
34
35
public void Response()
36
{
37
Console.WriteLine("Host waken!");
38
}
39
}
40
41
public class Cat : Subject
42
{
43
private ArrayList observers;
44
public Cat()
45
{
46
this.observers = new ArrayList();
47
}
48
public void AimAt(Observer obs)
49
{
50
this.observers.Add(obs);
51
}
52
public void Cry()
53
{
54
Console.WriteLine("Cat cryed!");
55
foreach (Observer obs in this.observers)
56
{
57
obs.Response();
58
}
59
}
60
}
61
class MainClass
62
{
63
static void Main(string[] args)
64
{
65
Cat cat = new Cat();
66
Mouse mouse1 = new Mouse("mouse1", cat);
67
Mouse mouse2 = new Mouse("mouse2", cat);
68
Master master = new Master(cat);
69
cat.Cry();
70
}
71
}
72
73
//---------------------------------------------------------------------------------------------
74
设计方法二: 使用event -- delegate设计..
75
public delegate void SubEventHandler();
76
public abstract class Subject
77
{
78
public event SubEventHandler SubEvent;
79
protected void FireAway()
80
{
81
if (this.SubEvent != null)
82
this.SubEvent();
83
}
84
}
85
public class Cat : Subject
86
{
87
public void Cry()
88
{
89
Console.WriteLine("cat cryed.");
90
this.FireAway();
91
}
92
}
93
public abstract class Observer
94
{
95
public Observer(Subject sub)
96
{
97
sub.SubEvent += new SubEventHandler(Response);
98
}
99
public abstract void Response();
100
}
101
public class Mouse : Observer
102
{
103
private string name;
104
public Mouse(string name, Subject sub) : base(sub)
105
{
106
this.name = name;
107
}
108
public override void Response()
109
{
110
Console.WriteLine(name + " attempt to escape!");
111
}
112
}
113
public class Master : Observer
114
{
115
public Master(Subject sub) : base(sub){}
116
public override void Response()
117
{
118
Console.WriteLine("host waken");
119
}
120
}
121
class Class1
122
{
123
static void Main(string[] args)
124
{
125
Cat cat = new Cat();
126
Mouse mouse1 = new Mouse("mouse1", cat);
127
Mouse mouse2 = new Mouse("mouse2", cat);
128
Master master = new Master(cat);
129
cat.Cry();
130
}
131
}
132

6
public interface Observer7
{8
void Response(); //观察者的响应,如是老鼠见到猫的反映9
}10
public interface Subject11
{12
void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠13
}14
public class Mouse : Observer15
{16
private string name;17
public Mouse(string name, Subject subj)18
{ 19
this.name = name;20
subj.AimAt(this);21
}22
23
public void Response()24
{25
Console.WriteLine(name + " attempt to escape!");26
}27
}28
public class Master : Observer29
{ 30
public Master(Subject subj)31
{ 32
subj.AimAt(this);33
}34
35
public void Response()36
{37
Console.WriteLine("Host waken!");38
} 39
}40
41
public class Cat : Subject42
{43
private ArrayList observers;44
public Cat()45
{ 46
this.observers = new ArrayList();47
}48
public void AimAt(Observer obs)49
{50
this.observers.Add(obs);51
}52
public void Cry()53
{54
Console.WriteLine("Cat cryed!");55
foreach (Observer obs in this.observers)56
{57
obs.Response();58
}59
}60
}61
class MainClass62
{ 63
static void Main(string[] args)64
{65
Cat cat = new Cat();66
Mouse mouse1 = new Mouse("mouse1", cat);67
Mouse mouse2 = new Mouse("mouse2", cat);68
Master master = new Master(cat);69
cat.Cry();70
}71
}72

73
//---------------------------------------------------------------------------------------------74
设计方法二: 使用event -- delegate设计..75
public delegate void SubEventHandler();76
public abstract class Subject77
{78
public event SubEventHandler SubEvent;79
protected void FireAway()80
{81
if (this.SubEvent != null)82
this.SubEvent();83
} 84
}85
public class Cat : Subject86
{ 87
public void Cry()88
{89
Console.WriteLine("cat cryed.");90
this.FireAway();91
}92
}93
public abstract class Observer94
{95
public Observer(Subject sub)96
{97
sub.SubEvent += new SubEventHandler(Response);98
}99
public abstract void Response(); 100
}101
public class Mouse : Observer102
{103
private string name;104
public Mouse(string name, Subject sub) : base(sub)105
{ 106
this.name = name;107
}108
public override void Response()109
{110
Console.WriteLine(name + " attempt to escape!");111
}112
}113
public class Master : Observer114
{115
public Master(Subject sub) : base(sub){}116
public override void Response()117
{118
Console.WriteLine("host waken");119
}120
}121
class Class1122
{123
static void Main(string[] args)124
{125
Cat cat = new Cat();126
Mouse mouse1 = new Mouse("mouse1", cat);127
Mouse mouse2 = new Mouse("mouse2", cat);128
Master master = new Master(cat);129
cat.Cry();130
}131
}132


浙公网安备 33010602011771号