猫大叫一声,所有的老鼠都开始逃跑 观察者模式

两种方法   
  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();   
                  }   
          }  

posted @ 2013-07-19 17:56  window5549-accp  阅读(172)  评论(0)    收藏  举报