1、创建监听器接口
public interface ListenerInterface {
/**
* 监听初始化操作
* @param sub 被监听对象
*/
public void listenInit(AnotherSubject sub);
/**
* 监听销毁操作
* @param sub 被监听对象
*/
public void listenDestroy(AnotherSubject sub);
}
2、创建被监听类
public class AnotherSubject {
private String name;
private static List<ListenerInterface> listeners = new ArrayList<ListenerInterface>();
/**
* 是否启动监听器
*/
private boolean isListenerOn = true;
public AnotherSubject(String name) {
this.name = name;
}
/**
* 启动监听器
*
*/
public void setListenerOn() {
this.isListenerOn = true;
}
/**
* 关闭监听器
*
*/
public void setListenerOff() {
this.isListenerOn = false;
}
/**
* 添加监听器
*
* @param listener
*/
public static void addListner(ListenerInterface listener) {
listeners.add(listener);
}
/**
* 移除指定监听器
*
* @param listener
* 监听器
*/
public static void removeListner(ListenerInterface listener) {
listeners.remove(listener);
System.out.println("移除监听器{" + listener + "}");
}
/**
* 初始化操作,激活监听器的相应操作
*
*/
public void init() {
System.out.println("初始化[" + name + "].....");
if (isListenerOn) {
for (ListenerInterface listner : listeners) {
listner.listenInit(this);
}
}
}
/**
* 销毁操作,激活监听器的相应操作
*
*/
public void destroy() {
System.out.println("销毁[" + name + "].....");
if (isListenerOn) {
for (ListenerInterface listner : listeners) {
listner.listenDestroy(this);
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3、测试监听器效果
public class ListenerTester {
public static void main(String[] args) {
ListenerInterface initListener = new ListenerInterface(){
private String listnerName = "监听器init";
public void listenDestroy(AnotherSubject sub) {
System.out.println(listnerName+"监听到对象"+sub.getName()+"销毁");
}
public void listenInit(AnotherSubject sub) {
System.out.println(listnerName+"监听到对象"+sub.getName()+"创建");
}
};
ListenerInterface destroyListener = new ListenerInterface(){
private String listnerName = "监听器Destroy";
public void listenDestroy(AnotherSubject sub) {
System.out.println(listnerName+"监听到对象"+sub.getName()+"销毁");
}
public void listenInit(AnotherSubject sub) {
System.out.println(listnerName+"监听到对象"+sub.getName()+"创建");
}
};
AnotherSubject.addListner(initListener);
AnotherSubject.addListner(initListener);
AnotherSubject.addListner(initListener);
AnotherSubject.addListner(destroyListener);
AnotherSubject.addListner(destroyListener);
AnotherSubject sub = new AnotherSubject("被监听的对象");
sub.init();//初始化
AnotherSubject.removeListner(initListener);//移除监听器
AnotherSubject.removeListner(initListener);
sub.setListenerOff();//关闭监听器
sub.destroy();
sub.setListenerOn();//启动监听器
sub.destroy();
}
}
4、输出结果
初始化[被监听的对象].....
监听器init监听到对象被监听的对象创建
监听器init监听到对象被监听的对象创建
监听器init监听到对象被监听的对象创建
监听器Destroy监听到对象被监听的对象创建
监听器Destroy监听到对象被监听的对象创建
移除监听器{cn.ac.sict.listners.ListenerTester$4@b8df17}
移除监听器{cn.ac.sict.listners.ListenerTester$4@b8df17}
销毁[被监听的对象].....
销毁[被监听的对象].....
监听器init监听到对象被监听的对象销毁
监听器Destroy监听到对象被监听的对象销毁
监听器Destroy监听到对象被监听的对象销毁