※天道酬勤※

§水至清则无鱼,人至察则无徒§
posts - 65, comments - 11, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

猫,老鼠,人

Posted on 2006-07-29 08:02 五指魅力 阅读(132) 评论(0)  编辑 收藏 引用
猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒
要求: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();
 }
 }
只有注册用户登录后才能发表评论。