偶遇面试题
无意“又”发现公司一个面试题,因为没做过,所以拿来试试。
是一道设计题,既:
猫大叫一声,所有老鼠都开始逃跑,主人被惊醒。
要求:a.要有联动性,老鼠和主人的行为是被动的;
b.考虑扩展性,猫的叫声可以引起其他的联动效应。
我得想法是用事件处理a要求。扩展自然要有。
贴上个人代码(控制台程序),刚开始本来抽出了一个响应接口以对耗子和主人的连锁反应,
但考虑违背伦理和OO就单写了他们的方法,尽管喷。
Code
1 /// <summary>
2 /// 猫叫委托
3 /// </summary>
4 public delegate void CallHandler();
5
6 public class Cat
7 {
8 public void Call()
9 {
10 Console.WriteLine("猫叫了!");
11 if (Cat_Call != null)
12 {
13 Cat_Call.Invoke();
14 }
15 }
16 //添加猫叫声的联动反映
17 public void Affected(params CallHandler[] Response)
18 {
19 for (int i = 0; i < Response.Length; i++)
20 {
21 Cat_Call += Response[i];
22 }
23 }
24 //猫叫事件
25 public event CallHandler Cat_Call;
26 }
27 /// <summary>
28 /// 老鼠类
29 /// </summary>
30 public class Mouse
31 {
32 public void Hear()
33 {
34 Console.WriteLine("老鼠听到了猫的大叫!");
35 Response();
36 }
37 public void Response()
38 {
39 Console.WriteLine("老鼠跑了!!");
40 }
41 }
42 /// <summary>
43 /// 主人类
44 /// </summary>
45 public class Master
46 {
47 public void Hear()
48 {
49 Console.WriteLine("主人听到了猫的大叫!");
50 Response();
51 }
52
53 public void Response()
54 {
55 Console.WriteLine("主人被惊醒!!");
56 }
57 }
58 class Program
59 {
60 static void Main(string[] args)
61 {
62 Cat c = new Cat();
63
64 Mouse m = new Mouse();
65
66 Master master = new Master();
67
68 c.Affected(m.Hear, master.Hear);//如果主人没听见可不添加主人方法地址,老鼠同理。
69
70 c.Call();
71 }
72 }


浙公网安备 33010602011771号