打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一道java关于设计模式笔试题
题目:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒   
要求: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();  
                  }  
          }   

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C#经典笔试题
C#.Net的常见面试试题
观察者模式
C#程序设计笔试题
.net面试题3
委托和设计模式(2)(上)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服