package my.addon;
public interface BaskAddon {
}
package my.addon;
import my.domain.Message;
public interface MessageAddon extends BaskAddon {
/** 在发送消息后执行 */
public abstract void onAfterSend(Message message);
/** 在接收到消息后执行 */
public abstract void onAfterReveive(Message message);
}
package my.addon;
import my.domain.Message;
public class MyPlug1 implements MessageAddon{
public void onAfterReveive(Message message) {
System.out.println("onAfterReveive我的插件1");
System.out.println("添加短信通知他收邮件");
}
public void onAfterSend(Message message) {
System.out.println("onAfterSend我的插件1");
System.out.println("添加短信通知他收邮件");
}
}
package my.domain;
public abstract class Message {
private String title;
private String content;
}
package my.domain;
public class SendMessage extends Message {
}
package my.event;
import java.util.EventObject;
public class BaskEvent extends EventObject {
public BaskEvent(Object source) {
super(source);
}
}
package my.event;
import my.domain.Message;
public class MessageEvent extends BaskEvent{
/** 产生事件所对应的消息 */
private Message message;
public MessageEvent(Object source, Message message){
super(source);
this.message = message;
}
/** 获取事件对应的消息 */
public Message getMessage() {
return message;
}
}
package my.listener;
import java.util.EventListener;
public interface BaskEventListener extends EventListener {
}
package my.listener;
import my.event.MessageEvent;
public interface MessageEventListener extends BaskEventListener {
void onMessageEvent(MessageEvent event);
}
package my.manager;
import java.util.List;
import my.addon.MessageAddon;
import my.domain.SendMessage;
import my.event.MessageEvent;
import my.listener.MessageEventListener;
public class MessageAddonManager implements MessageEventListener {
/**
* 消息插件
*/
private List<MessageAddon> messageAddons;
public void onMessageEvent(MessageEvent event) {
if (messageAddons != null) {
for (MessageAddon messageAddon : messageAddons) {
if (event.getMessage() instanceof SendMessage) {// 发送的消息
messageAddon.onAfterSend(event.getMessage());
} else {// 接收的消息
messageAddon.onAfterReveive(event.getMessage());
}
}
}
}
public List<MessageAddon> getMessageAddons() {
return messageAddons;
}
public void setMessageAddons(List<MessageAddon> messageAddons) {
this.messageAddons = messageAddons;
}
}
package my.manager;
import java.util.List;
import my.domain.Message;
import my.domain.SendMessage;
import my.event.MessageEvent;
import my.listener.MessageEventListener;
public class SendMessageService {
List<MessageEventListener> messageEventListeners;
public List<MessageEventListener> getMessageEventListeners() {
return messageEventListeners;
}
public void setMessageEventListeners(List<MessageEventListener> messageEventListeners) {
this.messageEventListeners = messageEventListeners;
}
/** 保存并发送消息 */
public void addAndSendMessage(SendMessage sendMsg) {
// addSendMessage(sendMsg);// 保存发送消息,但不发送
// fireMessageEvent(sendMsg);// 发布发送消息的事件
// operateReceiveMsg(sendMsg);// 插入收件箱
}
/** 发送消息,在发送前需要先更新发件箱中对应的发送信息。 */
public void sendMessage(SendMessage sendMsg) {
// sendMsg.setCreateTime(new Date().toLocaleString());
// sendMsgDao.updateSendMessage(sendMsg);// 更新消息
// fireMessageEvent(sendMsg);// 发布发送消息的事件
// operateReceiveMsg(sendMsg);// 插入收件箱
}
private void operateReceiveMsg(SendMessage sendMsg) {
}
/**
* 产生一个消息事件
* @param message
*/
protected void fireMessageEvent(Message message){
if(messageEventListeners != null){
MessageEvent msgEvent = new MessageEvent(this,message);
for (MessageEventListener listener:messageEventListeners){
listener.onMessageEvent(msgEvent);
}
}
}
}
package my.manager;
import java.util.ArrayList;
import java.util.List;
import my.addon.MessageAddon;
import my.addon.MyPlug1;
import my.listener.MessageEventListener;
public class SystemInit {
public void init() {
List<MessageAddon> messageAddons = new ArrayList<MessageAddon>();
messageAddons.add(new MyPlug1());
new MessageAddonManager().setMessageAddons(messageAddons);
List<MessageEventListener> messageEventListeners = new ArrayList<MessageEventListener>();
messageEventListeners.add(new MessageAddonManager());
new SendMessageService().setMessageEventListeners(messageEventListeners);
}
}