分享

一道java关于设计模式笔试题

 昵称22401 2007-03-23
题目:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒   
要求:1。要有联动性,老鼠和主人的行为是被动的   
           2。考虑可扩展性,猫的叫声可能引起其他联动效应  
 
  两种方法  
  1   使用观察者模式  
    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();  
                  }  
          }  
   
  2   使用事件  
  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()  
                  {  
                          Console.WriteLine("host   waken");  
                  }  
          }  
          class   Class1  
          {  
                  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();  
                  }  
          }   

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多