"猫叫,老鼠跑,主人惊醒"
在观察者模式下的实现时,提到该题还可通过"事件-委托"来实现.下面给出代码(摘录)
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!");
}
}
//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!");
}
}