前言:有点类似于策略者模式,在代码中用接口实现逻辑,实际使用时根据传入的监听类的内容不同,代码会有不同的效果。联想Kafka监听,道理应该是相同的。
欢迎指正,zwh_mc@sina.com
实现所需要的对象:
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();
}
}
执行结果:
-
初始化
-
销毁
成功监听到了初始化和销毁事件....