观察者模式经典例子(猫叫)

拟墨画扇 提交于 2020-03-27 08:43:21
最近在园子里浏览时看到不少朋友都在提一道经典的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 }
抽象----所有设计模式的精髓.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!