当前位置:编程学习 > C#/ASP.NET >>

重庆微软技术中心笔试题。

夜晚,一只猫大叫,所有的老鼠逃窜,主人被惊醒,起身........

要求:画出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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,