zoukankan      html  css  js  c++  java
  • 观察者模式经典例子(猫叫)

    最近在园子里浏览时看到不少朋友都在提一道经典的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 }
    抽象----所有设计模式的精髓.
  • 相关阅读:
    (三)RabbitMQ:客户端开发向导
    (二)RabbitMQ:RabbitMQ相关概念介绍
    (一)RabbitMQ:RabbitMQ初体验
    支付宝手机网站支付接入(沙箱环境)
    vue-cli3.0 的使用
    Windows平台上好用的SSH客户端
    JWT
    cnetos 安装nginx后查找nginx配置文件路径
    centos搭建nginx服务,给某个目录及子目录nginx的读取权限
    windows下mysqldump.exe、mysql.exe导出mysql数据到sql文件
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1283659.html
Copyright © 2011-2022 走看看