今天无聊看了下struts源码 发现原来Listener的实现其实挺简单的。
先在这里记一下
实现所需要的对象:
1.需要监听的对象:Monitable
2.监听器接口:Listener
3.监听器实现:MyListener
4.测试类:Test
1.需要监听的对象
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author zfss Email: zfss2012@gmail.com
* @version Date: 2012-3-21,Time: 下午01:23:04
*/
public class Monitable {
private List<Listener> listeners = new CopyOnWriteArrayList<Listener>();
public void addListener(Listener listener){
listeners.add(listener);
}
public void removeListener(Listener listener){
listeners.remove(listener);
}
public void init(){
if(!(listeners.size()==0)){
for(Listener l:listeners){
l.init();
}
}
/**
* 接下来是正常的初始化逻辑
*/
}
public void destory(){
if(!(listeners.size()==0)){
for(Listener l:listeners){
l.destory();
}
}
/**
* 接下来是正常的销毁逻辑
*/
}
}
2.监听器接口
/**
* @author zfss Email: zfss2012@gmail.com
* @version Date: 2012-3-21,Time: 下午01:26:02
*/
public interface Listener {
public void init();//监听初始化事件
public void destory();//监听销毁事件,可以自己定义一些事件什么的
}
3.监听器实现
/**
* @author zfss Email: zfss2012@gmail.com
* @version Date: 2012-3-21,Time: 下午01:40:30
*/
import static net.sszf.util.Print.*;
public class MyListener implements Listener{
@Override
public void init() {
println("初始化");
}
@Override
public void destory() {
println("销毁");
}
}
4.测试类
import static net.sszf.util.Print.*;
/**
* @author zfss Email: zfss2012@gmail.com
* @version Date: 2012-3-19,Time: 下午09:30:23
*/
public class Test{
public static void main(String[] args){
Monitable mt=new Monitable();
mt.addListener(new MyListener()); //添加监听器
mt.init();
mt.destory();
}
}
执行结果:
初始化
销毁
成功监听到了初始化和销毁事件....
算是一种AOP吧