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


    最近在园子里浏览时看到不少朋友都在提一道经典的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 }
    抽象----所有设计模式的精髓.
  • 相关阅读:
    Dubbo 节点telnet测试
    node.js 文件下载
    node.js获取ip及mac
    excel中根据A列筛选B列填充C列
    django在读取数据库时未筛选到符合条件的记录会报错
    django分页功能
    django中命令行调试程序
    Python中if-else的多种写法
    python自定义函数的参数之四种表现形式
    python类变量和实例变量的区别
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1283659.html
Copyright © 2020-2023  润新知