http://blog.csdn.net/hxhbluestar/archive/2005/03/10/316648.aspx
看完作者写的代码感觉非常烦琐,同时就如同作者所说还存在不足.利用C#的事件技术可以很好的解决上述问题.以下是实现的UML截图:

下面给出解决代码:
using System;

namespace test
{

public interface IObserver
{
ISubject Subject
{
set;
}
}

public interface ISubject
{
}

class Class1
{
[STAThread]
static void Main(string[] args)
{
int i;
CatClass catsubject=new CatClass ();
for (i=0;i<10;i++)
{
RatClass rat=new RatClass();
rat.Subject =catsubject;
}

ManClass man=new ManClass();
man.Subject=catsubject;
catsubject.Miao();
Console.ReadLine ();
}
}

public class CatClass:ISubject
{
#region ICat 成员
public delegate void CatEventHandler(object source,EventArgs e);
public event CatEventHandler CatEvent;

public void Miao()
{
Console.WriteLine ("喵");
if (CatEvent!=null)
{
CatEvent(this,EventArgs.Empty);
}
}

#endregion
}

public class RatClass:IObserver
{
#region IObserver 成员

CatClass cat=null;
public ISubject Subject
{
set
{
cat=(CatClass)value;
cat.CatEvent+=new test.CatClass.CatEventHandler(Run);
}
}

#endregion


public void Run(object source, EventArgs e)
{
Console.WriteLine ("猫来了,赶紧跑!!!");
}

}

public class ManClass:IObserver
{
CatClass cat=null;
#region IObserver 成员

public ISubject Subject
{
set
{
cat=(CatClass)value;
cat.CatEvent+=new test.CatClass.CatEventHandler(Wake);
}
}

#endregion

private void Wake(object source, EventArgs e)
{
Console.WriteLine ("主人被吵醒");
}
}

}
看完作者写的代码感觉非常烦琐,同时就如同作者所说还存在不足.利用C#的事件技术可以很好的解决上述问题.以下是实现的UML截图:

下面给出解决代码:
using System;
namespace test
{
public interface IObserver
{
ISubject Subject
{
set;
}
}
public interface ISubject
{
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
int i;
CatClass catsubject=new CatClass ();
for (i=0;i<10;i++)
{
RatClass rat=new RatClass();
rat.Subject =catsubject;
}
ManClass man=new ManClass();
man.Subject=catsubject;
catsubject.Miao();
Console.ReadLine ();
}
}
public class CatClass:ISubject
{
#region ICat 成员
public delegate void CatEventHandler(object source,EventArgs e);
public event CatEventHandler CatEvent;
public void Miao()
{
Console.WriteLine ("喵");
if (CatEvent!=null)
{
CatEvent(this,EventArgs.Empty);
}
}
#endregion
}
public class RatClass:IObserver
{
#region IObserver 成员
CatClass cat=null;
public ISubject Subject
{
set
{
cat=(CatClass)value;
cat.CatEvent+=new test.CatClass.CatEventHandler(Run);
}
}
#endregion

public void Run(object source, EventArgs e)
{
Console.WriteLine ("猫来了,赶紧跑!!!");
}
}
public class ManClass:IObserver
{
CatClass cat=null;
#region IObserver 成员
public ISubject Subject
{
set
{
cat=(CatClass)value;
cat.CatEvent+=new test.CatClass.CatEventHandler(Wake);
}
}
#endregion
private void Wake(object source, EventArgs e)
{
Console.WriteLine ("主人被吵醒");
}
}
}


浙公网安备 33010602011771号