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
}