自己动手实现-监听器
2016-03-21 01:21
344 查看
监听器就是在执行一些操作的时候通知监听此事件的对象执行一定的方法。
写了BingoneMap,其中使用Set存储监听器,在事件发生后执行监听器事件。基本要素是留一个口子给开发者实现该事件需执行怎么的操作。
同时注意数据之间的传递,监听器方法和调用者之间的数据交互。
写了BingoneMap,其中使用Set存储监听器,在事件发生后执行监听器事件。基本要素是留一个口子给开发者实现该事件需执行怎么的操作。
同时注意数据之间的传递,监听器方法和调用者之间的数据交互。
package bingone; import java.util.*; /** * Created by bingone on 16/3/21. */ public class BingoneMap<K, V> { private Map<K, V> data = new HashMap<K, V>(); private Set<BingoneMapListener> listeners = new LinkedHashSet<BingoneMapListener>(); public V get(K key) { for (BingoneMapListener b : listeners) { b.commonJob(new BingoneMapListener.Event(key, BingoneMapListener.EnumEvent.GET)); } System.out.println("Listener has been done"); return null == key ? null : data.get(key); } public void put(K key, V value) { for (BingoneMapListener b : listeners) { b.commonJob(new BingoneMapListener.Event(key, BingoneMapListener.EnumEvent.PUT)); } System.out.println("Listener has been done"); data.put(key, value); } public void addListener(BingoneMapListener bingoneMapListener) { this.listeners.add(bingoneMapListener); } public static abstract class BingoneMapListener<T> { public T retData; public BingoneMapListener(T retData) { this.retData = retData; } public void commonJob(Event event) { System.out.println("now in " + this); myJob(event); System.out.println("now out " + this); } public abstract T myJob(Event event); public static class Event<E> { public E inputData; public EnumEvent enumEvent; public Event(E inputData, EnumEvent e) { this.inputData = inputData; this.enumEvent = e; } } public enum EnumEvent { PUT(), GET(); } } public static void main(String... args) { BingoneMap<String, String> bm = new BingoneMap<String, String>(); final StringBuilder sb = new StringBuilder(); bm.addListener(new BingoneMapListener(sb) { @Override public Object myJob(Event event) { System.out.println("in listener"); if (event.enumEvent == EnumEvent.GET) { System.out.println("get " + event.inputData + " at " + System.currentTimeMillis()); sb.append("get"); } else if (event.enumEvent == EnumEvent.PUT) { System.out.println("put " + event.inputData + " at " + System.currentTimeMillis()); sb.append("put"); } return "success"; } }); bm.put("a", "b"); bm.get("a"); System.out.println(sb.toString()); } }
相关文章推荐
- 第四周作业
- Win7系统如何把程序图标添加到开始菜单中
- Java学习笔记之垃圾回收机制
- 排序算法
- 使用函数指针和多态代替冗长的if-else或者switch-case
- H5的storage(sessionstorage&localStorage)简单存储删除
- spring学习笔记(9)AOP基本概念
- Android学习之TabLayout的使用解析
- SolrCloud 分布式集群部署步骤
- 【机器学习】逻辑回归
- Python之isinstance
- springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息
- 日K蜡烛图
- 交换分区设置
- hello i am comin
- Linux学习笔记20130315
- 事件切换
- 微信退款demo--Java
- AT&T汇编语言学习:利用c库、文件读写
- Chromium网页渲染机制简要介绍和学习计划