重庆微软技术中心笔试题。
夜晚,一只猫大叫,所有的老鼠逃窜,主人被惊醒,起身........要求:画出UML图
2、根据以上编写一个程序。 --------------------编程问答-------------------- 好像以前有人发过? --------------------编程问答-------------------- 要答案?等等 --------------------编程问答-------------------- 题目:猫叫,老鼠逃跑,主人惊醒。(10分)
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准:
<1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)
程序代码
1using System;
2using System.Collections;
3
4namespace ConsoleApplication1
5{
6 public inte易做图ce Observer
7 {
8 void Response(); //观察者的响应,如是老鼠见到猫的反映
9 }
10 public inte易做图ce 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}
设计方法二: 使用event -- delegate设计..
程序代码
1using System;
2using System.Collections;
3
4
5namespace 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} --------------------编程问答-------------------- 这个题目我就已经见过好几次了,南京皓都公司也面试这个题。 --------------------编程问答-------------------- 学习。 --------------------编程问答-------------------- 见过 --------------------编程问答-------------------- 又是这道题。。。
观察者模式。。。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习了~~ --------------------编程问答-------------------- 像小学考试 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 我比较好奇楼主是谁. --------------------编程问答-------------------- 老掉牙的题目。 --------------------编程问答-------------------- 顶! --------------------编程问答-------------------- 又是这道题。。。 --------------------编程问答-------------------- 学习...... --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- N年前就考过~~ --------------------编程问答-------------------- 路过 --------------------编程问答-------------------- 见识了 --------------------编程问答-------------------- 恩。。算是学习了 --------------------编程问答-------------------- 委托+事件
--------------------编程问答-------------------- 不见得是微软的哦~~
呵呵 --------------------编程问答-------------------- 好像看过了,观察者
补充:.NET技术 , ASP.NET