一道有趣的C#考试题目

题目:猫叫,老鼠逃跑,主人惊醒。(10分)

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

 程序代码

1using System;
2using System.Collections;
3
4namespace ConsoleApplication1
5{
6 public interface Observer
7 {
8  void Response();    //观察者的响应,如是老鼠见到猫的反映
9 }
10 public interface Subject  [nfScript]google_ad_client = "pub-4475724770859924";google_alternate_color = "FFBBE8";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel ="9379930647";google_color_border = "F8F8F8";google_color_bg = "FFFFFF";google_color_link = "FF6FCF";google_color_url = "38B63C";google_color_text = "B3B3B3";[/nfScript][nfScript=http://pagead2.googlesyndication.com/pagead/show_ads.js][/nfScript]
11 {
12  void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
13 }

14
15 public class Mouse : Observer
16 {
17  private string name;
18  public Mouse(string name, Subject subj)
19  {          
20   this.name = name;
21   subj.AimAt(this);
22  }
23        
24  public void Response()
25  {
26   Console.WriteLine(name + " attempt to escape!");
27  }
28 }
29
30 public class Master : Observer
31 {  
32  public Master(Subject subj)
33  {          
34   subj.AimAt(this);
35  }
36        
37  public void Response()
38  {
39   Console.WriteLine("Host waken!");
40  }  
41 }
42  
43
44 public class Cat : Subject
45 {
46  private ArrayList observers;
47  public Cat()
48  {  
49   this.observers = new ArrayList();
50  }
51  public void AimAt(Observer obs)
52  {
53   this.observers.Add(obs);
54  }
55  public void Cry()
56  {
57   Console.WriteLine("Cat cryed!");
58   foreach (Observer obs in this.observers)
59   {
60    obs.Response();
61   }
62  }
63 }
64
65 class MainClass
66 {
67  /**//// <summary>
68  /// 应用程序的主入口点。
69  /// </summary>
70  [STAThread]
71  static void Main(string[] args)
72  {
73   Cat cat = new Cat();
74   Mouse mouse1 = new Mouse("mouse1", cat);
75   Mouse mouse2 = new Mouse("mouse2", cat);
76   Master master = new Master(cat);
77   cat.Cry();
78  }
79 }
80}

--------------------------------------------------------------------------------

设计方法二: 使用event -- delegate设计..

 程序代码

1using System;
2using System.Collections;
3
4
5namespace ConsoleApplication1
6{
7 public delegate void SubEventHandler();
8 public abstract class Subject
9 {
10  public event SubEventHandler SubEvent;
11  protected void FireAway()
12  {
13   if (this.SubEvent != null)
14    this.SubEvent();
15  }  
16 }
17 public class Cat : Subject
18 {  
19  public void Cry()
20  {
21   Console.WriteLine("cat cryed.");
22   this.FireAway();
23  }
24 }
25
26 public abstract class Observer
27 {
28  public Observer(Subject sub)
29  {
30   sub.SubEvent += new SubEventHandler(Response);
31  }
32  public abstract void Response();    
33 }
34 public class Mouse : Observer
35 {
36  private string name;
37  public Mouse(string name, Subject sub) : base(sub)
38  {  
39   this.name = name;
40  }
41  public override void Response()
42  {
43   Console.WriteLine(name + " attempt to escape!");
44  }
45 }
46 public class Master : Observer
47 {
48  public Master(Subject sub) : base(sub){}
49  public override void Response()
50  {
51   Console.WriteLine("host waken");
52  }
53 }
54
55 class MainClass
56 {
57  /**//// <summary>
58  /// 应用程序的主入口点。
59  /// </summary>
60  [STAThread]
61  static void Main(string[] args)
62  {
63   Cat cat = new Cat();
64   Mouse mouse1 = new Mouse("mouse1", cat);
65   Mouse mouse2 = new Mouse("mouse2", cat);
66   Master master = new Master(cat);
67   cat.Cry();
68  }
69 }
70}
 

时间: 2024-12-23 18:49:52

一道有趣的C#考试题目的相关文章

经典算法(11) 一道有趣的GOOGLE面试题 --【解法2】

上一篇<白话经典算法系列之十一道有趣的GOOGLE面试题>中对一道有趣的GOOGLE面试题进行了详细的讲 解,使用了类似于基数排序的做法在O(N)的时间复杂度和O(1)的空间复杂度完成了题目的要求,文章发表后 ,网友fengchaokobe在评论中给出了另一种解法,见下图. 文字版: int Repeat(int *a, int n) { for(int i = 0; i < n; i++) { if(a[i] > 0) //判断条件 { if(a[ a[i] ] < 0)

经典算法(10) 一道有趣的GOOGLE面试题

最近在微博上看到一道有趣的GOOGLE面试题,见下图: 文字版: 一个 大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空 间和O(n)时间. 这个题目要求用O(n)的时间复杂度,这意味着只能遍历数组一次.同时还要寻找重复 元素,很容易想到建立哈希表来完成,遍历数组时将每个元素映射到哈希表中,如果哈希表中已经存在这个 元素则说明这就是个重复元素.因此直接使用C++ STL中的hash_set(参见<STL系列之六 set与hash_set

一道关于数组的算法题目,请用java实现。

问题描述 一道关于数组的算法题目,请用java实现. 在这个图片里我们有不同高度的墙.这个图片由一个整数数组所代表,数组中每个数是墙的高度.上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]. 假如开始下雨了,那么墙之间的水坑能够装多少水呢? 请用java实现(任意数组求出结果) 解决方案 参考这三个贴 http://www.cnblogs.com/xiangnan/archive/2013/11/01/3402467.html http://blog.jobbole.com/5070

求助一道画ER图的题目

问题描述 求助一道画ER图的题目 本人初学数据库,老师布置了一个ER图的作业,想了很久还是觉得很混乱题目大致如下:一个健康公司正在进行一个试药项目,该项目通过志愿者试药来确定药是否有副作用.在每一次试药中,一个药品会被多个志愿者尝试.这个项目是由一个志愿者试药,然后报告这个药是否有副作用,每个报告需要记录两个内容:1,志愿者是否有副作用 2,如果有,这个副作用是什么,有可能一个志愿者有多个副作用 没有已定义的副作用,因为副作用是不断被发现的然后,约束条件:1,每个志愿者只能尝试一种药2,关于志愿

问一道开关电灯的acm题目

问题描述 问一道开关电灯的acm题目 开关电灯查看 提交 统计 提问总时间限制: 1000ms 内存限制: 65536kB描述N盏灯排成一排,从1到N依次编号.有N个人也同样编号.第一个人将灯全部熄灭:第2个人将对应2和2的倍数的灯打开:第3个人将对应着3和3的倍数的灯做反向操作(如果原来是开,则关掉它,否则就打开它):以后的人和3做同样的操作,即第i个人将对应着i和i的倍数的灯做反向操作.输入灯的总数N 1<=N<=1000输出在第N个人操作后,顺序输出还亮着灯的编号.样例输入8样例输出2

问一道acm二分查找的题目。

问题描述 问一道acm二分查找的题目. 查找最接近的元素 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000. 第二行包含n个整数,为非降序列各元素.所有元素的大小均在0-1,000,000,000之间. 第三行包含一个整数m,为要询问的给定值个数.1 <= m <= 10000. 接下来m行,每行一个整数,为要询问最接近元素

编程c语言-c语言课设考试题目,求大神们帮忙

问题描述 c语言课设考试题目,求大神们帮忙 各位兄弟们能不能帮帮忙,课设考试.竞赛编程题目">

一道关于java异常处理的题目_java

1.建立exception包,编写TestException.java程序,主方法中有以下代码,确定其中可能出现的异常,进行捕获处理. public class YiChang { public static void main(String[] args){ for(int i=0;i<4;i++){ int k; switch(i){ case 0: int zero=0; try{ k=911/zero; }catch(ArithmeticException e){ System.out.

求救!!考试题目,请帮忙给下答案!!是ASP的,图片等都输入完整了

问题描述 考试需要,题目如下..2题已做,寻求三四题答案2.请在D盘建立的目录下制作一个Acsess数据库文件<Grades.mdb>,表名称为"成绩表",字段名称与数据类型如图1,然后再依照图2输入6条记录(20分).3.请在D盘建立的目录下编写一个ASP程序读取表的所有记录并依照图3的格式将读取的内容显示出来,文件命名为[Exam1.asp](25分).4.请在D盘建立的目录下编写一个ASP程序在此表新增加一条记录,其值分别为"A7","张