zoukankan      html  css  js  c++  java
  • 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#控制台程序)

    程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

    要求:  

    1.要有联动性,老鼠和主人的行为是被动的。

    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 Program
         {
             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();
             }
     
         } 

     第二种解决方案采用观察者模式:猫叫-》老鼠跑;猫叫-》人醒

     public interface Observer
         {
             void Response();    //观察者的响应,如是老鼠见到猫的反映
         }
         public interface Subject
         {
             void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
         }
         public class Mouse : Observer
         {public Mouse(Subject subj)
             {           
                 subj.AimAt(this);
             }
             
             public void Response()
             {
                 Console.WriteLine(name + " 老鼠开始逃跑了!");
             }
         }
         public class Master : Observer
         {   
             public Master(Subject subj)
             {           
                 subj.AimAt(this);
             }
             
             public void Response()
             {
                 Console.WriteLine("主人被惊醒!");
             }  
         }
      
         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("猫叫了!");
                 foreach (Observer obs in this.observers)
                 {
                     obs.Response();
                 }
             }
         }
         class Program
         {       
             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();
             }
         }
     
  • 相关阅读:
    MYSQL 数据库管理
    maven初学总结
    解决问题的思路
    java泛型综述
    几种不常用的排序算法
    创新思维
    Django从入门到放弃
    KlayGE 4.0中Deferred Rendering的改进(二):拥挤的GBuffer
    用Android NDK r6编译boost 1.47
    glloader移植到了Android
  • 原文地址:https://www.cnblogs.com/star8521/p/4977980.html
Copyright © 2011-2022 走看看