觀察者模式經典例子(貓叫)

來源:互聯網
上載者: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 }
抽象----所有設計模式的精髓.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.