本文续自: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,调用receiver的ProcessMessage。*/
}
//在以下框架的特定事件中调用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);
}
}