猫大叫一声,主人被惊醒,老鼠被下跑。用C#实现这个过程。该题目经常被C#.net面试中设计成重要面试设计题,不管是用C#实现该过程还是抽象成一个game原型,仔细想想这个场景是不是跟老板监视办公室员工玩游戏类似,老板亲自或指派某人或通过软件工具来监视员工打游戏,一端员工开始打游戏,那么老板的那个“监视器”事件被触发,老板就知晓了。
该实例场景中有三个对象分别为:主人对象(类),老鼠对象(类),猫对象(类)。这三个对象不同时继承同一父类(不属于 Is a ……关系),并且他们又不是同时拥有同一子类/方法/属性(不属于Has a ……关系),且场景中又相互有联系。
不能把主人和老鼠作为猫的变量成员出现,因为猫并不拥有主人和老鼠两个对象;且不能在猫的任何方法中实例化老鼠和主人,因为猫任何动作都不会产生老鼠和主人。主人类中肯定有一wakeup方法,老鼠类中必须有个Run方法,那么有人肯定会想到猫类中有一个Cry方法,再仔细想想猫仅仅有个Cry方法够不够,谁来触发呢?所以猫类这时候必须拥有一个惊叫的事件来触发让人类、鼠类和猫类关联起来。好了我们分析清楚了,通过猫类的惊叫事件来触发主人的惊醒,老鼠的逃跑。
具体代码如下:
//定义猫大叫事件的代理
public delegate void AlertHa