event-delegate經典例子(貓叫)
來源:互聯網
上載者:User
上一次說過經典面試題:
"貓叫,老鼠跑,主人驚醒"
在觀察者模式下的實現時,提到該題還可通過"事件-委託"來實現.下面給出代碼(摘錄)public delegate void CryEventHandler();
//step1 抽象事件引發者(貓)類,引發CryEventHandler類型的事件
public abstract class Subject
{
public event CryEventHandler CryEvent;
protected void FireEvent() //不需要被子類實現
{
if(CryEvent!=null)
{
this.CryEvent();
}
}
}
//實現貓類,並通過Cry方法引發事件
public class Cat:Subject
{
public void Cry()
{
Console.WriteLine("Cat Cryed!");
this.FireEvent();
}
}
//抽象觀察者基類
public abstract class Observer
{
public Observer(Subject sub)
{
sub.CryEvent+=new CryEventHandler(this.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("Cat Cryed!"+name+" Run!");
}
}
public class Master:Observer
{
private string name;
public Master(string name,Subject sub):base(sub)
{
this.name=name;
}
public override void Response()
{
Console.WriteLine("Cat Cryed!"+name+" WeakUP!");
}
}