面试了一道在CSDN上贴过的题,后悔并散分着
昨天用公司通知我去复试 
 不知道为啥还要做题...... 
 看到有一个关于设计模式的题目: 
 描述:猫大叫一声,所有老鼠开始逃跑,主人被惊醒 
 A)要有联动性 老鼠与主人的行为是被动的 
 B)考虑扩展性,猫的叫声可能引起其他的联动效应     
 我晕,想起来以前在CSDN上有人贴出过,还有很多牛人写了自己的答案 
 那时感觉自己还嫩着,不可能遇到这样的题,结果昨天..... 
 现在终于知道什么叫后悔了,唉,还有知道的么?以前的题我找不到了,谢谢! 
 感觉平时看贴也是要好好总结的,面试什么的没准用的着。
------解决方案--------------------public interface Observer 
     { 
         void Response();    //观察者的响应,如是老鼠见到猫的反映 
     } 
     public interface Subject 
     { 
         void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠 
     } 
     public class Mouse : Observer 
     { 
         private string name; 
         public Mouse(string name, Subject subj) 
         {            
             this.name = name; 
             subj.AimAt(this); 
         }           
         public void Response() 
         { 
             Console.WriteLine(name +  " attempt to escape! "); 
         } 
     } 
     public class Master : Observer 
     {    
         public Master(Subject subj) 
         {            
             subj.AimAt(this); 
         }           
         public void Response() 
         { 
             Console.WriteLine( "Host waken! "); 
         }   
     }    
     public class Cat : Subject 
     { 
         private ArrayList observers; 
         public Cat() 
         {    
             this.observers = new ArrayList(); 
         } 
         public void AimAt(Observer obs) 
         { 
             this.observers.Add(obs); 
         } 
         public void Cry() 
         { 
             Console.WriteLine( "Cat cryed! "); 
             foreach (Observer obs in this.observers) 
             { 
                 obs.Response(); 
             } 
         } 
     } 
     class MainClass 
     {        
         static void Main(string[] args) 
         { 
             Cat cat = new Cat(); 
             Mouse mouse1 = new Mouse( "mouse1 ", cat); 
             Mouse mouse2 = new Mouse( "mouse2 ", cat); 
             Master master = new Master(cat); 
             cat.Cry(); 
         } 
     }     
 //---------------------------------------------------------   
 设计方法二: 使用event -- delegate设计.. 
     public delegate void SubEventHandler(); 
     public abstract class Subject 
     { 
         public event SubEventHandler SubEvent; 
         protected void FireAway() 
         { 
             if (this.SubEvent != null) 
                 this.SubEvent(); 
         }    
     } 
     public class Cat : Subject 
     {   
         public void Cry() 
         { 
             Console.WriteLine( "cat cryed. "); 
             this.FireAway(); 
         } 
     } 
     public abstract class Observer 
     { 
         public Observer(Subject sub) 
         { 
             sub.SubEvent += new SubEventHandler(Response); 
         } 
         public abstract void Response();     
     } 
     public class Mouse : Observer 
     { 
         private string name; 
         public Mouse(string name, Subject sub) : base(sub) 
         {    
             this.name = name; 
         } 
         public override void Response() 
         { 
             Console.WriteLine(name +  " attempt to escape! "); 
         } 
     } 
     public class Master : Observer 
     { 
         public Master(Subject sub) : base(sub){} 
         public override void Response() 
         {