在c#中实现消息订阅、派送设计模式

本文续自:http://blog.csdn.net/truexf/archive/2008/05/04/2378590.aspx

消息订阅、派送设计模式在“平台-插件”式软件架构设计中的应用

 

定义两个个接口<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

/* 消息接收者 */

interface IMsgReceiver

{

  void ProcessMessage(int message,Object obj); //消息处理

  IMsgSender GetSender; //取得消息发送者

}

 

/* 消息发送者 */

interface IMsgSender

{

  void BookMessage(IMsgReceiver receiver,int message); //消息订阅

  void DispatchMessage(int message);

}

 

/* 消息订阅记录 */

struct MsgReceiverInfo

{

  IMsgReceiver Receiver;

  int Message;

}

 

/*在系统的Form框架中实现IMsgSender*/

class BaseForm: Form,IMsgSender

{

  MsgReceiverInfo array[] FMsgReceivers;/* 用来保存消息订阅者 */

  public void BookMessage(IMsgReceiver receiver,int message)

  {

    /*receiver 加入到 FMsgReceivers列表*/

  }

  public void DispatchMessage(int message)

  {

    /*迭代FMsgReceivers,调用receiverProcessMessage*/

  }

 

  //在以下框架的特定事件中调用DispatchMessage

  protected void OnFormShow{...}

  protected void OnFormClose{...}

  protected void OnFormStateChange(State state){...}

}

 

//业务控件,实现了消息接收者IMsgReceiver

class MyComponent: Component,IMsgReceiver

{

  void ProcessMessage(int message,Object obj)

  {

    /*当接收到特定的消息时做出相应的处理*/

  }

  IMsgSender GetSender{

    /*返回控件实例所在的框架*/

  }

 

 

 

  void MyComponent{

 

  /* 在构造方法或其它的初始化的地方订阅消息*/

 

   GetSender.BookMessage(this,XXX);

 

  }

 

 

}

 

发布了38 篇原创文章 · 获赞 19 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/truexf/article/details/3291878