From: http://blog.csdn.net/truexf/archive/2008/05/04/2378590.aspx
Application of the message subscription and delivery design model in the "platform-plug-in" Software Architecture Design
Define two interfaces
/* Message Receiver */
Interface imsgreceiver
{
Void processmessage (INT message, object OBJ); // Message Processing
Imsgsender getsender; // gets the message sender.
}
/* Message sender */
Interface imsgsender
{
Void bookmessage (imsgreceiver receiver, int message); // message subscription
Void dispatchmessage (INT message );
}
/* Message subscription record */
Struct msgreceiverinfo
{
Imsgreceiver extends er;
Int message;
}
/* Implement imsgsender in the system form framework */
Class baseform: form, imsgsender
{
Msgreceiverinfo array [] fmsgreceivers;/* used to save the message subscriber */
Public void bookmessage (imsgreceiver receiver, int message)
{
/* Add the consumer er to the fmsgreceivers list */
}
Public void dispatchmessage (INT message)
{
/* Iterate fmsgreceivers and call processmessage of the processmesser. */
}
// Call dispatchmessage in a specific event of the following framework
Protected void onformshow {...}
Protected void onformclose {...}
Protected void onformstatechange (State state ){...}
}
// Business control that implements the Message Receiver imsgreceiver
Class mycomponent: component, imsgreceiver
{
Void processmessage (INT message, object OBJ)
{
/* Handle a specific message */
}
Imsgsender getsender {
/* Return the framework of the control instance */
}
Void mycomponent {
/* Subscribe to messages in the constructor or other initialization areas */
Getsender. bookmessage (this, XXX );
}
}