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