












题目:猫叫,老鼠逃跑,主人惊醒。(10分)
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)
1
using System;
2
using System.Collections;
3
4
namespace ConsoleApplication1
5
{
6
public interface Observer
7
{
8
void Response(); //观察者的响应,如是老鼠见到猫的反映
9
}
10
public interface Subject
11
{
12
void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
13
}
14
15
public class Mouse : Observer
16
{
17
private string name;
18
public Mouse(string name, Subject subj)
19
{
20
this.name = name;
21
subj.AimAt(this);
22
}
23
24
public void Response()
25
{
26
Console.WriteLine(name + " attempt to escape!");
27
}
28
}
29
30
public class Master : Observer
31
{
32
public Master(Subject subj)
33
{
34
subj.AimAt(this);
35
}
36
37
public void Response()
38
{
39
Console.WriteLine("Host waken!");
40
}
41
}
42
43
44
public class Cat : Subject
45
{
46
private ArrayList observers;
47
public Cat()
48
{
49
this.observers = new ArrayList();
50
}
51
public void AimAt(Observer obs)
52
{
53
this.observers.Add(obs);
54
}
55
public void Cry()
56
{
57
Console.WriteLine("Cat cryed!");
58
foreach (Observer obs in this.observers)
59
{
60
obs.Response();
61
}
62
}
63
}
64
65
class MainClass
66
{
67
/// <summary>
68
/// 应用程序的主入口点。
69
/// </summary>
70
[STAThread]
71
static void Main(string[] args)
72
{
73
Cat cat = new Cat();
74
Mouse mouse1 = new Mouse("mouse1", cat);
75
Mouse mouse2 = new Mouse("mouse2", cat);
76
Master master = new Master(cat);
77
cat.Cry();
78
}
79
}
80
}
81
82
设计方法二: 使用event -- delegate设计..
1
using System;
2
using System.Collections;
3
4
5
namespace ConsoleApplication1
6
{
7
public delegate void SubEventHandler();
8
public abstract class Subject
9
{
10
public event SubEventHandler SubEvent;
11
protected void FireAway()
12
{
13
if (this.SubEvent != null)
14
this.SubEvent();
15
}
16
}
17
public class Cat : Subject
18
{
19
public void Cry()
20
{
21
Console.WriteLine("cat cryed.");
22
this.FireAway();
23
}
24
}
25
26
public abstract class Observer
27
{
28
public Observer(Subject sub)
29
{
30
sub.SubEvent += new SubEventHandler(Response);
31
}
32
public abstract void Response();
33
}
34
public class Mouse : Observer
35
{
36
private string name;
37
public Mouse(string name, Subject sub) : base(sub)
38
{
39
this.name = name;
40
}
41
public override void Response()
42
{
43
Console.WriteLine(name + " attempt to escape!");
44
}
45
}
46
public class Master : Observer
47
{
48
public Master(Subject sub) : base(sub){}
49
public override void Response()
50
{
51
Console.WriteLine("host waken");
52
}
53
}
54
55
class MainClass
56
{
57
/// <summary>
58
/// 应用程序的主入口点。
59
/// </summary>
60
[STAThread]
61
static void Main(string[] args)
62
{
63
Cat cat = new Cat();
64
Mouse mouse1 = new Mouse("mouse1", cat);
65
Mouse mouse2 = new Mouse("mouse2", cat);
66
Master master = new Master(cat);
67
cat.Cry();
68
}
69
}
70
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。