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有内核级线程么.答:线程通常被定义为一个进程中代码的不同执行路线.从实现方式上划分,线程有两种类型:"用户级线程"和"内核 ...
一周排行
  • Exchange2010部署边缘服务器
     Exchange2010部署边缘服务器n 部署条件ü 边缘服务器属于工作组环境,DNS指 ...
  • 首先,先介绍下自己,看文章得知道作者是干嘛的 IDO老徐,互联网从业者,软件测试老鸟,08年开始从事软件测试职业:前后经历3家公司,从测试小菜到公司测试负责人,带领测试团队对公司整个产品体系负责: 专注测试职业探索. ...
  • 制作AdobeReader9.4.2安装包
    更正:我使用这种方式制作了完整安装包9.4.3,9.4.3安装好以后更新到9.4.4没有问 ...
  • 今天主管让布置一个 RedHat Enterprise Linux 的系统,找了半天终于找到相应的版本的,下面将找到的版本给兄弟们分享一下,大家以后使用都比较方便.(借鉴了很多其他兄弟们的成果,再此表示感谢~!!)先 ...
  •   为什么要创建索引呢?因为索引对提高数据库的性能很有帮助,换句话说就是可以更快地找到你想要的东东(和书的目录差不多).    索引分为聚集索引和非聚集索引,建聚集索引时要看这个表是否已经有聚集索引了,因为一个表只能 ...
  •  public static string NoHTML(string Htmlstring)    {        //删除脚本        Htmlstring = Regex.Replace(Htmlstr ...
  • 最近项目中用到了FLASH多文件上传功能,根据虽然CS4是最新的,但还是选择了CS3FLASH CS3,使用的是ActionScript 3.0,在开发的过程中发现 AS3与AS2的区别是非常大的,比如geturl等 ...
  • 解决VIM中打开文件里有的^M字符&Linux命令dos2unix
    产生问题的原因:     在linux下,不可避免的会用VIM打开一些windows下编辑 ...
  • Nginx反向代理配置详解一.建立用户和用户组12二.安装Nginx所需的pcre库cd pcre-7.9/./configuremake &&  make install三.安装Nginx1cd n ...
  • 题意:求gcd(i,n) 首先,.而它,就相当于; i*i<=n; i++) if (x%i==0) { ret=ret/i*(i-1); // 先除后乘防溢出 while (x%i==0) x/=i; } i ...