1程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言) 
  2要求:1.要有联动性,老鼠和主人的行为是被动的。
  32.考虑可扩展性,猫的叫声可能引起其他联动效应。
  4public interface Observer 
  5
  6void Response();//观察者的响应,如是老鼠见到猫的反映 
  7}
 
  8public interface Subject 
  9
 10void AimAt(Observer obs);//针对哪些观察者,这里指猫的要扑捉的对象---老鼠 
 11}
 
 12public class Mouse : Observer 
 13
 14private string name; 
 15public Mouse(string name, Subject subj) 
 16
 17this.name = name; 
 18subj.AimAt(this); 
 19}
 
 20public void Response() 
 21
 22Console.WriteLine(name + " attempt to escape!"); 
 23}
 
 24}
 
 25public class Master : Observer 
 26
 27public Master(Subject subj) 
 28
 29subj.AimAt(this); 
 30}
 
 31public void Response() 
 32
 33Console.WriteLine("Host waken!"); 
 34}

 35}
 
 36public class Cat : Subject 
 37
 38private ArrayList observers; 
 39public Cat() 
 40
 41this.observers = new ArrayList(); 
 42}
 
 43public void AimAt(Observer obs) 
 44
 45this.observers.Add(obs); 
 46}
 
 47public void Cry() 
 48
 49Console.WriteLine("Cat cryed!"); 
 50foreach (Observer obs in this.observers) 
 51
 52obs.Response(); 
 53}
 
 54}
 
 55}
 
 56class MainClass 
 57
 58static void Main(string[] args) 
 59
 60Cat cat = new Cat(); 
 61Mouse mouse1 = new Mouse("mouse1", cat); 
 62Mouse mouse2 = new Mouse("mouse2", cat); 
 63Master master = new Master(cat); 
 64cat.Cry(); 
 65}
 
 66}
 
 67//--------------------------------------------------------------------------------------------- 
 68设计方法二: 使用event -- delegate设计.. 
 69public delegate void SubEventHandler(); 
 70public abstract class Subject 
 71
 72public event SubEventHandler SubEvent; 
 73protected void FireAway() 
 74
 75if (this.SubEvent != null
 76this.SubEvent(); 
 77}
 
 78}
 
 79public class Cat : Subject 
 80{
 81public void Cry() 
 82
 83Console.WriteLine("cat cryed."); 
 84this.FireAway(); 
 85}
 
 86}
 
 87public abstract class Observer 
 88
 89public Observer(Subject sub) 
 90
 91sub.SubEvent += new SubEventHandler(Response); 
 92}
 
 93public abstract void Response();
 94}
 
 95public class Mouse : Observer 
 96
 97private string name; 
 98public Mouse(string name, Subject sub) : base(sub) 
 99
100this.name = name; 
101}
 
102public override void Response() 
103
104Console.WriteLine(name + " attempt to escape!"); 
105}
 
106}
 
107public class Master : Observer 
108
109public Master(Subject sub) : base(sub){} 
110public override void Response() 
111
112Console.WriteLine("host waken"); 
113}
 
114}
 
115class Class1 
116
117static void Main(string[] args) 
118
119Cat cat = new Cat(); 
120Mouse mouse1 = new Mouse("mouse1", cat); 
121Mouse mouse2 = new Mouse("mouse2", cat); 
122Master master = new Master(cat); 
123cat.Cry(); 
124}
 
125}

只有注册用户登录后才能发表评论。

posts - 46, comments - 16, trackbacks - 0, articles - 7

Copyright © 火山工作室