从.net 视角重新再看 小猫嚷嚷 群鼠乱窜 主人惊醒的问题
时间:2010-08-30 来源:天使也疯狂
作为一个从事.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);
总结上面的文字 可以写一个简单的方法表示 代码如下
public static void run()
{
Cat c=new Cat();
Mouse m1=new Mouse();
Mouse m2=new Mouse();
AllMouse mouses=new Allmouse();
mouses.Add(m1);
mouses.Add(m2);
Man man=new Man();
c.Called=new Called(mouses.Flee);
mouses.Fleed+=new Fleed(man.WakeUp);
c.Call();
}
然后 要实现整个的程序 就不是想象的那么难构造了
整个程式代码如下 希望大家能够更好的理解这个问题
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