DEM 机制实现Observer模式
在上一篇Observer 模式在eHR中的应用中提到了Observer模式在eHR中的应用,其中处理方式是用的传统的设计原则,但是无论在java中还是c#中,都有了DEM模型,所以采用DEM模型来实现Observer模式会更快,切在扩展性上也有一定的提高(比如不需要必须在Observer中实现Update函数,而只要符合代理约定即可)。
下面我就用DEM模型来重新修改程序
using System;
namespace Observer.DEMObserver


{

/**//// <summary>
/// DEMObserverTest 的摘要说明。
/// </summary>
public class DEMObserverTest

{
public DEMObserverTest()

{
//
// TODO: 在此处添加构造函数逻辑
//
}

/**//// <summary>
/// 虚拟主题
/// </summary>
public class Subject

{
public delegate void UpdateDelegate();
public event UpdateDelegate UpdateHandler;

/**//// <summary>
/// 添加观察者
/// </summary>
/// <param name="observerDelegate"></param>
public void AttachObserver(UpdateDelegate observerDelegate)

{
UpdateHandler+=observerDelegate;
}

/**//// <summary>
/// 分离观察者
/// </summary>
/// <param name="observerDelegate"></param>
public void DetachObserver(UpdateDelegate observerDelegate)

{
UpdateHandler-=observerDelegate;
}

/**//// <summary>
/// 通知方法
/// </summary>
public void NotifyObservers()

{
if(UpdateHandler!=null)

{
UpdateHandler();
}
Console.ReadLine();
}
}

/**//// <summary>
/// 组织架构修改主题
/// </summary>
public class OrgChgSubject:Subject

{
}

/**//// <summary>
/// 组织架构变化观察者
/// </summary>
public class OrgChgObserver

{
public void UpdateDelegateImplement()

{
Console.WriteLine("*******组织架构改动主题*******");
Console.WriteLine("1.组织架构已经发生改变!");
Console.WriteLine("*****************************");
Console.WriteLine("*******绩效系统的观察者*******");
Console.WriteLine("1.已经接受到组织改动主题的通知");
Console.WriteLine("2.更新绩效管理系统的签核人");
Console.WriteLine("3.更新完毕");
Console.WriteLine("*****************************");
}
}
}
}
在另外的一个主类中的DEM调用代码如下:
using System;
namespace Observer


{

/**//// <summary>
/// 主类
/// </summary>
public class MainClass

{
[STAThread]
static void Main(string[] args)

{

非DEM实现#region 非DEM实现
// OrgChgSubject o_OrgChgSubject=new OrgChgSubject();
// OrgChgObserver o_OrgChgObserver=new OrgChgObserver();
// o_OrgChgSubject.AttachObserver(o_OrgChgObserver);
// o_OrgChgSubject.NotifyObservers();
// Console.ReadLine();
#endregion

DEM实现#region DEM实现
DEMObserver.DEMObserverTest.OrgChgSubject o_OrgChgSubject=new Observer.DEMObserver.DEMObserverTest.OrgChgSubject();
DEMObserver.DEMObserverTest.OrgChgObserver o_OrgChgObserver=new Observer.DEMObserver.DEMObserverTest.OrgChgObserver();
o_OrgChgSubject.AttachObserver(new DEMObserver.DEMObserverTest.Subject.UpdateDelegate(o_OrgChgObserver.UpdateDelegateImplement));
o_OrgChgSubject.NotifyObservers();
#endregion
}
}
}
下面我就用DEM模型来重新修改程序
