DEM 机制实现Observer模式
在上一篇Observer 模式在eHR中的应用中提到了Observer模式在eHR中的应用,其中处理方式是用的传统的设计原则,但是无论在java中还是c#中,都有了DEM模型,所以采用DEM模型来实现Observer模式会更快,切在扩展性上也有一定的提高(比如不需要必须在Observer中实现Update函数,而只要符合代理约定即可)。
下面我就用DEM模型来重新修改程序
在另外的一个主类中的DEM调用代码如下:
下面我就用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("*****************************");
}
}
}
}
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("*****************************");
}
}
}
}
using System;
namespace Observer
{
/// <summary>
/// 主类
/// </summary>
public class MainClass
{
[STAThread]
static void Main(string[] args)
{
非DEM实现
DEM实现
}
}
}
namespace Observer
{
/// <summary>
/// 主类
/// </summary>
public class MainClass
{
[STAThread]
static void Main(string[] args)
{
非DEM实现
DEM实现
}
}
}