程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:  
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
            <2>从Mouse和Master中提取抽象(5分)
            <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

  1 public interface Observer
  2     {
  3         void Response();    //观察者的响应,如是老鼠见到猫的反映
  4     }
  5     public interface Subject
  6     {
  7         void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
  8     }
  9     public class Mouse : Observer
 10     {
 11         private string name;
 12         public Mouse(string name, Subject subj)
 13         {           
 14             this.name = name;
 15             subj.AimAt(this);
 16         }
 17         
 18         public void Response()
 19         {
 20             Console.WriteLine(name + " attempt to escape!");
 21         }
 22     }
 23     public class Master : Observer
 24     {   
 25         public Master(Subject subj)
 26         {           
 27             subj.AimAt(this);
 28         }
 29         
 30         public void Response()
 31         {
 32             Console.WriteLine("Host waken!");
 33         }  
 34     }
 35  
 36     public class Cat : Subject
 37     {
 38         private ArrayList observers;
 39         public Cat()
 40         {   
 41             this.observers = new ArrayList();
 42         }
 43         public void AimAt(Observer obs)
 44         {
 45             this.observers.Add(obs);
 46         }
 47         public void Cry()
 48         {
 49             Console.WriteLine("Cat cryed!");
 50             foreach (Observer obs in this.observers)
 51             {
 52                 obs.Response();
 53             }
 54         }
 55     }
 56     class MainClass
 57     {       
 58         static void Main(string[] args)
 59         {
 60             Cat cat = new Cat();
 61             Mouse mouse1 = new Mouse("mouse1", cat);
 62             Mouse mouse2 = new Mouse("mouse2", cat);
 63             Master master = new Master(cat);
 64             cat.Cry();
 65         }
 66     }
 67 
 68 
 69 //---------------------------------------------------------------------------------------------
 70 
 71 设计方法二: 使用event -- delegate设计..
 72     public delegate void SubEventHandler();
 73     public abstract class Subject
 74     {
 75         public event SubEventHandler SubEvent;
 76         protected void FireAway()
 77         {
 78             if (this.SubEvent != null)
 79                 this.SubEvent();
 80         }   
 81     }
 82     public class Cat : Subject
 83     {  
 84         public void Cry()
 85         {
 86             Console.WriteLine("cat cryed.");
 87             this.FireAway();
 88         }
 89     }
 90     public abstract class Observer
 91     {
 92         public Observer(Subject sub)
 93         {
 94             sub.SubEvent += new SubEventHandler(Response);
 95         }
 96         public abstract void Response();    
 97     }
 98     public class Mouse : Observer
 99     {
100         private string name;
101         public Mouse(string name, Subject sub) : base(sub)
102         {   
103             this.name = name;
104         }
105         public override void Response()
106         {
107             Console.WriteLine(name + " attempt to escape!");
108         }
109     }
110     public class Master : Observer
111     {
112         public Master(Subject sub) : base(sub){}
113         public override void Response()
114         {
115             Console.WriteLine("host waken");
116         }
117     }
118     class Class1
119     {
120         static void Main(string[] args)
121         {
122             Cat cat = new Cat();
123             Mouse mouse1 = new Mouse("mouse1", cat);
124             Mouse mouse2 = new Mouse("mouse2", cat);
125             Master master = new Master(cat);
126             cat.Cry();
127         }
128 
129     }
130 

转载于:https://www.cnblogs.com/EasyLive2006/archive/2007/04/28/730805.html

转---猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 [观察者模式]相关推荐

  1. 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒

    程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求:   1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 要点:1. 联动效果, ...

  2. java猫大叫一声_猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 | 学步园

    程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求: 1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 要点:1. 联动效果,运行 ...

  3. java猫大叫一声_为什么我的猫一直叫着呢?

    原标题:为什么我的猫一直叫着呢? 猫咪一直叫时,可能正在向你传递以下信号. 1.意味着您的猫处于高温状态 如果您的5或6个月大的奶猫不断叫,说明您的猫可能很热.闷热中的猫发出异常响亮的声音,这种声音几 ...

  4. 一道面试题:猫大叫了一声...

    今天在博客园上看到一道面试题,是关于委托和事件的,为了重温事件的应用,自己又做了一遍. 题目:  程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求:  1.要有联动性,老鼠 ...

  5. C#面向对象试题一道,猫大叫,老鼠逃跑,主人惊醒。

    程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求:1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 答:方法一:  public ...

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

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

  7. 电脑发出很大的嗡嗡声_跟踪嗡嗡声的十大方法

    电脑发出很大的嗡嗡声 "Tracking consumer trends is one way to gain inspiration, helping you dream up profi ...

  8. 18-19款迈巴赫S400改装原厂3D大柏林之声,天籁之音

    大家好,我是小志bzs878,专注名车原厂升级,欢迎戳戳右上角"+"号关注一下,持续为您带来精彩改装案例 原厂3D大柏林之声音响共有27个扬声器和两个功放共1590瓦的功率组成.把 ...

  9. 游戏创作——爱猫大作战乀

    今天,我玩到一款全新的小游戏--爱猫大作战

最新文章

  1. NetLink Communication Mechanism And Netlink Sourcecode Analysis
  2. java 序列化 例子_Java序列化和反序列化例子
  3. Android 中的编码与解码
  4. Python自动生成10000个java类使用APT注解后引发的问题
  5. 掌握AI核心技术没有秘籍,能自己创造就是王道
  6. 网易10万+课程迅速刷屏又迅速被封:“违规”背后的思考
  7. VC CUtilityLZW 效率还行的LZW压缩算法,随机数加密
  8. Github/github 初始化教程
  9. antd的timePicker.RangePicker设置结束时间不可早于开始时间
  10. 80386汇编_寄存器 寻址方式介绍
  11. hadoop详细笔记(十一) mapreduce数据分析案例之线段重叠案例
  12. [IT与培训]IT培训与企业建设的思路
  13. 计算机教学得意之处,看不懂没关系,知道厉害就行了:中科大俩教授11年解了两道数学难题...
  14. UML协作图(通信图)——软件需求分析与设计
  15. 博客大巴,自动登录,并发布信息开发小计。
  16. 【微信公众号】获取用户信息
  17. 安科瑞企业综合能效管理系统 时丽花
  18. 猜数字游戏c语言编程,【游戏编程】猜数字游戏(C语言)
  19. 卡牌大师怎么玩_LOL钻石速成 卡牌大师崔斯特完美攻略
  20. 为企业完成数字化转型,新零售,这个概念是相对于传统零售而言的。

热门文章

  1. AngularJS 表格
  2. Ubuntu下GTK的安装、编译和测试
  3. 干掉ubuntu中的overlay scrollbar
  4. away3d 4.0.9Gold 学习笔记 加载方法总结(4)
  5. 虚拟化技术--桌面虚拟化(VDI)
  6. linux 自动安装系统,cobbler 自动安装linux系统
  7. 2020江苏省计算机等级考试题库,2020年江苏省计算机等级考试易考套餐:三级数据库技术题库+教材...
  8. 手机学python语言用什么软件好_盘点几个在手机上可以用来学习编程的软件
  9. SpringMVC 配置注解的映射器、适配器(重点)
  10. COM.MYSQL.JDBC.DRIVER 和 COM.MYSQL.CJ.JDBC.DRIVER的区别