觀察者模式經典例子(貓叫)
來源:互聯網
上載者:User
最近在園子裡瀏覽時看到不少朋友都在提一道經典的C#面試題:
"貓叫,老鼠跑,主人被驚醒",要求用C#實現.
園子裡已經有不少的朋友都實現了.具體的方法通過觀察者模式或者事件來實現.
我這裡先摘錄一下觀察者模式的實現,代碼如下: 1 namespace 貓叫
2 {
3 //貓叫,老鼠跑,主人驚醒
4 //使用觀察者模式
5 //step1 抽象觀察者
6 public interface Observer
7 {
8 void Response(); //接收到事件後作出反應
9 }
10 //step2 抽象引發觀察者反應的主對象(貓)
11 public interface Subject
12 {
13 void AimAt(Observer ob); //貓叫後將作用的對象
14 }
15 //抽象老鼠和主人
16 public class Mouse:Observer
17 {
18 private string name;
19 public Mouse(string name,Subject sub) //在建構函式中添加對Subject對象的觀察(這裡觀察貓)
20 {
21 this.name = name;
22 sub.AimAt(this);
23 }
24 public void Response()
25 {
26 Console.WriteLine("Cat Cryed," + name + " run!");
27 }
28 }
29 public class Master:Observer
30 {
31 private string name;
32 public Master(string name, Subject sub)//在建構函式中添加對Subject對象的觀察(這裡觀察貓)
33 {
34 this.name = name;
35 sub.AimAt(this);
36 }
37 public void Response()
38 {
39 Console.WriteLine("Cat cryed ," + name + " is weakup!");
40 }
41 }
42 public class Cat:Subject
43 {
44 private List<Observer> obs;
45 public Cat()
46 {
47 this.obs = new List<Observer>();
48 }
49 public void AimAt(Observer ob)
50 {
51 this.obs.Add(ob);
52 }
53 public void Cry()
54 {
55 foreach(Observer ob in this.obs)
56 {
57 ob.Response();
58 }
59 }
60 }
61 class Program
62 {
63 static void Main(string[] args)
64 {
65 Cat cat=new Cat();
66 Mouse mouse1 = new Mouse("mouse1", cat);
67 Mouse mouse2 = new Mouse("mouse2", cat);
68 Master master = new Master("Xu", cat);
69 cat.Cry();
70 Console.ReadLine();
71 }
72 }
73 }
抽象----所有設計模式的精髓.