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有内核级线程么.答:线程通常被定义为一个进程中代码的不同执行路线.从实现方式上划分,线程有两种类型:"用户级线程"和"内核 ...
一周排行