参考文章:http://www.jdon.com/jivejdon/thread/37712
引子:
描述:监听器模式是对某种共有操作的监控。当此操作执行时对此操作作相应处理。
包含的元素:
1. 要监控的事件定义
2. 监控该事件的监听器
3. 要监控的事件操作
4. 监控者
元素的职责:
1.定义了要监控事件的时间类型定义,和其它和该事件相关的特殊定义
2.监听器,用于对事件发生后要执行操作的接口定义
3.要监控的事件、操作,对于要监控的事件,他必须要包含被监控事件的注册功能
4.监控者要实现要监控的事件接口,完成时间发生后的操作内容
实例:下面做一个简单的例子
例子描述:
比如论坛里要展示某个发贴用户的发帖总数,当用户没发一次贴,总数就加1。 我们要做的就是每当用户发一次贴的时候再展示页面展示出用户最新的发帖总数。
实战:
1. 事件定义
package com.amdocs.log; public interface IDomainEvent { /** 定义事件类型 */ public static final String CREATE_MESSAGE = "CREATE_MESSAGE"; public static final String DELETE_MESSAGE = "DELETE_MESSAGE"; public String getEventType(); }
/**
* * 创建消息事件 * */ public class CreateMessageDomainEvent implements IDomainEvent { private String eventType = ""; public CreateMessageDomainEvent() { eventType = IDomainEvent.CREATE_MESSAGE; } public String getEventType() { return this.eventType; } }
2. 事件监听器定义
package com.amdocs.log; /** * * 监听器接口 * * */ public interface IDomainListener { public void actionPerformed(IDomainEvent event); }
3. 要监听操作的事件注册方法添加
package com.amdocs.log; /** * * 利用监听器,监听创建消息操作 * */ public class CreateMessageDomain { private IDomainListener listener; // 监听器注册 // 要让一个被监控的操作要具备能力,他必须支持对此监听器的注册,著有注册了此监听器,他相应的操作才可以被 事件触发者调用到 public void addDomainListener(IDomainListener listener) { this.listener = listener; } public void createMessage(String str) { System.out.println("开始创建消息,消息是" + str); messageCountPlus(); System.out.println("消息创建完成,总数加1完成"); } /** 时间发生后要执行的操作 */ public void messageCountPlus() { this.listener.actionPerformed(new CreateMessageDomainEvent()); } }
4. 监控者
package com.amdocs.log; /** * * 监听器模式的必要性 * 1. 对共同的事件操作进行抽象 * 2. 对同一操作进行统一执行 * * */ public class CreateMesaageWebPage implements IDomainListener { /** * * 创建消息的调用页面 必须实现监听器接口,來實現要被監控操作發生后的事件執行。 * */ public void actionPerformed(IDomainEvent event) { if (event.getEventType().equals(IDomainEvent.CREATE_MESSAGE)) { System.out.println("创建消息事件被触发--執行将消息总数加1操作"); } } /** * @param args */ public static void main(String[] args) { /** 开始调用操作创建消息 */ CreateMessageDomain domain = new CreateMessageDomain(); /** 注册监听器 */ domain.addDomainListener(new CreateMesaageWebPage());// 监听创建消息操作的 创建消息页面 domain.createMessage("Hello 监听器模式");// 执行要监控的操作 } }
5. 执行结果
开始创建消息,消息是Hello 监听器模式 创建消息事件被触发--執行将消息总数加1操作 消息创建完成,总数加1完成