1. 请用观察者模式实现如下应用场景(15分)
夜里有一只猫大叫了一声,同处一屋的老鼠接受到了猫大叫的信息,于是开始逃跑。同样,主人听到了,被吵醒了。
要求:
* 老鼠跟主人是被动的
* 要考虑联动性与扩展性
评分标准:接口定义5分,接口实现5分,调用接口实现测试5分。本题满分15分。
参考答案
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace LearnCatCry
{
#region "接口设计5分"
public interface Observer
{
void Response();//不可以加public修饰
}
public interface Cryer
{
void AddObserver(Observer objObserver);
}
#endregion
#region"接口实现5分"
public class Mouse : Observer
{
private string itsName;
//private Cryer objCryer;
public Mouse(string name, Cryer objCryer)
{
this.itsName = name;
//this.objCryer = objCryer;
objCryer.AddObserver(this);
}
#region Observer 成员
public void Response()
{
Console.WriteLine(itsName + " begin to escape!");
}
#endregion
}
public class Host : Observer
{
public Host(Cryer objCryer)
{
objCryer.AddObserver(this);
}
#region Observer 成员
public void Response()
{
Console.WriteLine("Host awoken!");
}
#endregion
}
public class Cat : Cryer
{
private ArrayList itsArrayList;
public Cat()
{
itsArrayList = new ArrayList();
}
public void Cry()
{
Console.WriteLine("Cat is Crying!");
foreach (Observer var in itsArrayList)
{
var.Response();
}
}
#region Cryer 成员
public void AddObserver(Observer objObserver)
{
itsArrayList.Add(objObserver);
}
#endregion
}
#endregion
#region "调用实现5分"
public class SolveCatCry
{
static void Main()
{
Cat objCat = new Cat();
Mouse objMouse1 = new Mouse("Mouse1", objCat);
Mouse objMouse2 = new Mouse("Mouse2", objCat);
Host objHost = new Host(objCat);
objCat.Cry();
}
}
#endregion
}