老鼠跑,猫叫,人醒是典型的事件联动,解决此种情形,可以利用观察者模式或者事件委托来实现。利用设计模式时要考虑耦合,但利用事件委托的话,就不需要了。因为用委托的话,理解比较容易,这里没有单写,而是将委托的相关代码写到了观察者模式的类代码中。

namespace ObserverCatMousePerson { public interface ISubject { void Attach(Observer o); void Detach(Observer o); void Run(); } } //抽象观察者 namespace ObserverCatMousePerson { public abstract class Observer { public abstract void Action(); } } namespace ObserverCatMousePerson { public class Mouse : ISubject { private IList<Observer> observers = new List<Observer>(); #region ISubject 成员 public void Attach(Observer o) { observers.Add(o); } public void Detach(Observer o) { observers.Remove(o); } public void Run() { foreach (Observer o in observers) { o.Action(); } } #endregion //如果用委托实现 //public event Action RunEvent; //public void StartRun() //{ //if (RunEvent != null) //{ // RunEvent(); //} //} } } namespace ObserverCatMousePerson { public class Cat : Observer { public override void Action() { Console.WriteLine("猫叫..."); } } } namespace ObserverCatMousePerson { public class Person : Observer { public override void Action() { Console.WriteLine("人醒了..."); } } }

客户端代码:

namespace ObserverCatMousePerson { class Program { static void Main(string[] args) { Mouse m = new Mouse(); Cat c = new Cat(); Person p = new Person(); m.Attach(c); m.Attach(p); m.Run(); Console.ReadKey(); //下面是用委托实现 //Console.WriteLine("利用委托实现:"); //m.RunEvent += new Action(c.Action); //m.RunEvent += new Action(p.Action); //m.StartRun(); //Console.ReadKey(); } } }

观察者模式和委托实现 - 老鼠跑,猫叫,人醒相关推荐

  1. Java猫叫老鼠跑人惊醒_面试题:猫叫、老鼠跑、人醒的一点看法

    这些天一直在面试中,做着不同的面试题,唉,悲催 上周做的一道面试题今天正好出现在园里的首页,看了一下这位同学的实现,基本上方向是对的,就是代码上细节没有注意,有一些错误,这里我就写一下我的理解 --- ...

  2. 一道事件委托面试题 - 猫叫老鼠跑主人醒

    /* 道事件委托面试题 - 猫叫老鼠跑主人醒 */using System;namespace CatCry {class MainClass{static void Main(string[] ar ...

  3. Java猫叫老鼠跑人惊醒_关于猫叫、老鼠逃跑、人被惊醒的程序设计

    题目是这样的:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. 要求: 1.要有联动性,老鼠和人的行为是被动的 2.考虑可扩展行,猫叫声可能会引起其他联动效应 看到这个程序设计题目,我的第一反应是用事件 ...

  4. 猫叫人醒老鼠跑 C#的委托及事件

    昨天进行了一下培训,讲解了一下委托跟事件的应用,说实话这个东西听起来还是一头雾水,虽然学会怎么用,但是还没搞明白需要在什么时候用到这个,后来我们经理给我举了个例子,让我做一个经典的委托和事件的例子,就 ...

  5. 转-观察模式 猫叫鼠跑人醒

    转-观察模式 猫叫鼠跑人醒 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. public interface Observer     {         void Response();    // ...

  6. 老鼠怕猫是鼻子决定的?!

    今天写点儿有趣的,当初就是被三篇老板的Cell吸引去了她那,这是第一篇,还上了封面呢! 老鼠怕猫,天经地义.可是实验室里养的老鼠已经上上下下几百代都从来没见过猫了,却还是会对猫的气味表现出本能的回避. ...

  7. 会抓老鼠的猫不一定是好猫

    好猫一定会抓老鼠,但是会抓老鼠的猫不一定是好猫. 捉老鼠,本来是猫的天职,是主人赋予猫的责任.如果猫捉住老鼠之后,恃功而娇,在主人还吃不饱饭的时候,天天要主人给买汤姆牌高级猫粮,不给买就罢工不捉老鼠了 ...

  8. 美杀人魔BTK与警方玩“老鼠戏猫”游戏31年,却栽在一个小小的word文档上面!...

    昨晚看电视,南方电视放的是Discovery拍摄的<全球重大凶案:BTK连环杀手>纪录片,感慨颇多.[@more@]1.案件情况: 1)"BTK"含义: 这是连环杀手丹 ...

  9. 猫大叫,鼠速逃,人醒了

    一道.Net程序员面试题的讨论:猫大叫,鼠速逃,人醒了. 考虑: (1)联动性 (2)可扩展性 编程实现它. 试了一下.   1 using System;   2    3 namespace de ...

最新文章

  1. 基于corosync和NFS服务器实现LNMP的高可用
  2. k8s pod的三类调度策略:资源限制策略、nodeSelector标签选择器、硬/软亲和性
  3. java语言程序设计第六章答案_Java语言程序设计(邵丽萍编著)第六章.doc
  4. 智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习
  5. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02
  6. bootstrap-table 树形结构
  7. 利用分析仪测量二极管的伏安特性
  8. Python&Opencv手势识别系统(完整源码&自定义UI操作界面&视频教程)
  9. 安装老版本flash - 解决”正尝试安装的adobe flash player不是最新版本“的办法
  10. PAT日志 1031
  11. git Pull Request 是什么意思?
  12. html在抽奖图片自动效果图,jQuery实现图片随机切换、抽奖功能(实例代码)
  13. Hinton论文系列-Reducing the dimensionality of data with neural networks
  14. U盘 如何自定义U盘图标并彻底隐藏配置文件
  15. Visio中关于跨线的设置
  16. 【论文阅读】Multi-hop Question Answering via Reasoning Chains
  17. 美军用机器人将超士兵数量 10个机器人1名士兵
  18. 使用 KubeSphere 轻松实现微服务灰度发布与熔断
  19. 百度:P2P网络宣传渠道将重构,审查后将出台“黑白名单”
  20. Failed to connect to github.com port 443 after 21035 ms: Timed out

热门文章

  1. GNSS NEMA语句解析之GGA
  2. 【Linux踩坑日记】:ubuntu环境下Linux系统没有网络连接,ifconfig查看发现只有lo,没有以太网eth0连接解决方法
  3. 微信html5页面开发教程,微信网页开发,如何在H5页面中设置分享的标题,内容以及缩略图...
  4. 树莓派以及一些常见的硬件设备的浮点计算能力
  5. Java学习日记Day11(面向对象day05)
  6. [九省联考2018]一双木棋
  7. 数据可视化-Treemap
  8. Nvidia显卡主机安装Ubuntu系统踩坑小结(Z1-Entry-Tower-G6主机安装Ubuntu-18.04)
  9. 基于微服务下的持续交付环境
  10. (五)打印机驱动设置—没有开不了的钱箱