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实现

            
DEM实现
        }

    }

}

posted on 2004-12-21 16:11  纯爷们  阅读(561)  评论(0编辑  收藏  举报

导航