从.net 视角重新再看 小猫嚷嚷 群鼠乱窜 主人惊醒的问题

作为一个从事.net 开发刚刚4年的新人 我又重新看一些面试题 希望能够以自己的视角独立解决问题

 

今天想和大家聊的就是

小猫嚷嚷 群鼠乱窜 主人惊醒的问题

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求: 1.要有联动性,老鼠和主人的行为是被动的。

          2.考虑可扩展性,猫的叫声可能引起其他联动效应。

  

我的思考方式是 先大致构造一个概略性设计程式 然后逐步构建小的逻辑代码

 

猫大叫一声 关键词 猫 叫喊

所有的老鼠开始逃跑 关键词 老鼠 跑

主人被惊醒 关键词 主人 惊醒

 

于是就有了下面的代码

cat.Call();

allmouses.Flee();

man.WakeUp();

 

怎样才能让上面的三句话有关联

可以继续读题目要求

 

猫大叫一声 ,所有的老鼠开始逃跑

 

也就是

cat.Called+=new Called(allmouses.Flee);

然后 老鼠逃跑的时候 主人被惊醒

也就是代码

allmouses.Fleed+=new Fleed(man.WakeUp);

 

而不是

cat.Called=new Called(man.WakeUp);

 

总结上面的文字 可以写一个简单的方法表示 代码如下 

 

1 public static void run()
2
3 {
4
5 Cat c=new Cat();
6
7 Mouse m1=new Mouse();
8
9   Mouse m2=new Mouse();
10
11   AllMouse mouses=new Allmouse();
12
13 mouses.Add(m1);
14
15 mouses.Add(m2);
16
17
18
19 Man man=new Man();
20
21 c.Called=new Called(mouses.Flee);
22
23 mouses.Fleed+=new Fleed(man.WakeUp);
24
25  
26
27 c.Call();
28
29 }
30  

 

 

 

然后 要实现整个的程序 就不是想象的那么难构造了

 

整个程式代码如下 希望大家能够更好的理解这个问题

 

1 using System;
2  using System.Collections.Generic;
3
4  namespace DP
5 {
6 public delegate void Called();
7 public delegate void Fleeded();
8 public class catmouseman
9 {
10 static void Main(string[] args)
11 {
12 Cat c = new Cat();
13 Mouse m1 = new Mouse("m1");
14 Mouse m2 = new Mouse("m2");
15 AllMouse mouses = new AllMouse();
16 mouses._Mouses.Add(m1);
17 mouses._Mouses.Add(m2);
18 Man man = new Man();
19
20 //调用所有老鼠逃跑的方法
21   c.called += new Called(mouses.Fleed);
22 //所有老鼠逃跑,调用人惊醒的方法
23   mouses.fleeded += new Fleeded(man.WakeUp);
24
25 //小猫真的开始喊叫了
26   c.run();
27
28 Console.ReadLine();
29 }
30 }
31
32 public class Cat
33 {
34 public Called called;
35 public void run()
36 {
37 Console.WriteLine("Cat called now");
38 if (called != null)
39 {
40 called();
41 }
42 }
43 }
44 public class Mouse
45 {
46 private string _Name;
47 public Mouse(string name)
48 {
49 _Name = name;
50 }
51 public void run()
52 {
53 Console.WriteLine(_Name + " run now");
54 }
55 }
56
57 public class AllMouse
58 {
59 public Fleeded fleeded;
60 public List<Mouse> _Mouses;
61 public AllMouse()
62 {
63 _Mouses = new List<Mouse>();
64 }
65 public void Fleed()
66 {
67 foreach (Mouse m in _Mouses)
68 {
69 m.run();
70 }
71 if (fleeded != null)
72 {
73 fleeded();
74 }
75 }
76 }
77
78 public class Man
79 {
80 public void WakeUp()
81 {
82 Console.WriteLine("Man wake up");
83 }
84 }
85 }
86  

 

 

 

 

posted on 2010-08-30 15:45  天使也疯狂  阅读(491)  评论(0编辑  收藏  举报

导航