猫 老鼠 人的编程题

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

要求:

1.要有联动性,老鼠和主人的行为是被动的。 
2.考虑可扩展性,猫的叫声可能引起其他联动效应。

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象 
评分标准: 构造出Cat、Mouse、Master三个类,并能使程序运行(2分) 
从Mouse和Master中提取抽象(5分) 
联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分) 

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

原文地址:https://www.cnblogs.com/zhangxl/p/4455385.html