C#经典机试题(猫叫)

猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应。

public interface Observer
{
void Response(); //观察者的响应,如是老鼠见到猫的反映
}
public interface Subject
{
void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
}
public class Mouse : Observer
{
private string name;
public Mouse(string name, Subject subj)
{
this.name = name;
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer
{
public Master(Subject subj)
{
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine("Host waken!");
}
}
public class Cat : Subject
{
private ArrayList observers;
public Cat()
{
this.observers = new ArrayList();
}
public void AimAt(Observer obs)
{
this.observers.Add(obs);
}
public void Cry()
{
Console.WriteLine("Cat cryed!");
foreach (Observer obs in this.observers)
{
obs.Response();
}
}
}
class MainClass
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat);
cat.Cry();
}
}
//------------------------------------------------------------
设计方法二: 使用event -- delegate设计..
public delegate void SubEventHandler();
public abstract class Subject
{
public event SubEventHandler SubEvent;
protected void FireAway()
{
if (this.SubEvent != null)
this.SubEvent();
}
}
public class Cat : Subject
{
public void Cry()
{
Console.WriteLine("cat cryed.");
this.FireAway();
}
}
public abstract class Observer
{
public Observer(Subject sub)
{
sub.SubEvent += new SubEventHandler(Response);
}
public abstract void Response(); } public class Mouse : Observer { private string name; public Mouse(string name, Subject sub) : base(sub) { this.name = name; } public override void Response() { Console.WriteLine(name + " attempt to escape!"); } } public class Master : Observer { public Master(Subject sub) : base(sub){} public override void Response() { Console.WriteLine("host waken"); } } class Class1 { static void Main(string[] args) { Cat cat = new Cat(); Mouse mouse1 = new Mouse("mouse1", cat); Mouse mouse2 = new Mouse("mouse2", cat); Master master = new Master(cat); cat.Cry(); } }

转自:http://kb.cnblogs.com/page/50471/

更多相关文章
  • [Linux  经典面试题]1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节点 来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5 ...
  • java经典面试题! 今天上午我总结了一下,java的一些企业常面试的面试题,也可以说是堪称经典吧!大部分企业的面试题,差不多都会以下我列出的面试题!而且面试题为红色的题更是企业经常面试的,可以说是屡试不爽,大家如果看到了我的这篇文章,那么请你进来看看,会对你有不小的收获的. 注意:以下的面试题,只 ...
  • 华为机试题——该警醒了,骚年
    因一次机试,随便写些东西,以此次之失误鞭策自己,水贴一篇,没什么知识分享,诸位大大可以选择无视O(∩_∩)O哈哈~ 2016.03.27下午参加华为机试,简单扫了一眼几个题的标题,选择了一道字符串问题,其实该题非常非常的简单,可以说是简单的不能再简单了,而且有很多种解法,上机时我选择了直接借用jav ...
  • @新青年学习网微软实战训练营公开课<解答Web Service和WCF.SOA经典面试题>微软.IBM.HP等大公司系统架构师面试题.Web服务是什么?SOAP与SOA?WSDL是什么?WCF是什么?Web服务和WCF什么区别?Axis是什么?什么是跨平台?周六晚9点 YY 525452 ...
  • 经典面试题  面试过程中,面试官会向应聘者发问,而应聘者的回答将成为面试官考虑是否接受他的重要依据.对应聘者而言,了解这些问题背后的"猫腻"至关重要.本文对面试中经常出现的一些典型问题进行了整理,并给出相应的回答思路和参考答案.读者无需过分关注分析的细节,关键是要从这些分析中&q ...
  • Java最全最经典面试题汇总,需要的请到我的群共享下载:149320397        本人已工作三年有余,当我们面试时面试官都问到一些非常刁钻的题目,这就需要我们平时多多的积累了,看到很多即将步入职场的同学或正在努力找工作的兄弟们苦于寻找面试题,便将三年来收藏的面试题归纳到一起,供大家参考,大概 ...
  • 这也是我最近想到的一道经典面试题,原题是这样的:有12个外观一模一样的球,知道其中一个球的质量和其他的球不一样,给你一个不带砝码的天平,要求称三次把这个质量不一样的球找出来.(注意:不知道这个球是轻是重) 后来我发现这道题把球的数量减少,难度会更高,所以我给各位出这样一道题:有8个外观一模一样的球, ...
  • 原文地址:C经典面试题六">linux C经典面试题六作者:忧伤岁月11.Windows是内核级线程么.答:见下一题12.Linux有内核级线程么.答:线程通常被定义为一个进程中代码的不同执行路线.从实现方式上划分,线程有两种类型:"用户级线程"和"内核 ...
一周排行
  • 前言:下面就不一一列出 pthread.NSThread.GCD.NSOperation 的完整的各种方法了,只分别将最常用的列出来,以便偶尔瞄一眼. 一.NSThread 1> 线程间的通讯/** 这个例子为 ...
  • SQLServer2005+附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法  我们在用Sql SQLServer2005+附加数据库文件时弹出错误信息如下图的处理办法:    方案一:切换登录方 ...
  • 2009年9月26日(周六) 晚上6分, 北京草庐     两年前,我的一个同事小T,一个母亲,刚刚生下了宝宝,全家欢天喜地迎接这个小生命的到来.但是宝宝长到几个月时候突然得了重病,费劲了一切努力还是没能挽救 ...
  • 连接过程是通过一系列状态表示的,这些状态有:LISTEN,SYN-SENT,SYN- RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAS ...
  • 虚拟机VMware与主机共享文件介绍
    我们经常会在Windows平台安装虚拟机VMware,不管是出于实验测试还是工作需要,伴随 ...
  • 一.前言备份数据库是生产环境中的首要任务,重中之重,有时候不得不通过网络进行数据库的复制,这样就需要保证数据在网络传输过程中的安全性,因此使用基于SSL的复制会大加强数据的安全性二.准备工作1.主从服务器时间同步1. ...
  • 进阶——树状数组区间求最值
    上一篇讲的是区间求和,这一篇讲区间求最值. 首先,a[]数组仍然是保存原始数据.但是c[] ...
  • Ubuntu10.10下apache部署Django的问题
     按照网上所说,配置apache:sudo vi /etc/apache2/httpd.c ...
  • 摘要:地图测距,大家都会,不就map.getDistance麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后海的距离,怎么办呢?显然"沿道路测距"就显得尤为重 ...
  • squid 编译参数说明 ./configure脚本有大量的不同选项,它们以-开始.当你敲入./configure --help时,能看到选项的完整列表.一些选项对所有configure脚本是通用的,还有一些是squ ...