在上一篇 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 } } } 转载于:https://www.cnblogs.com/Masterpiece/archive/2004/12/21/80093.html