Listener示例

来源:互联网 发布:淘宝上的降头是真的吗 编辑:程序博客网 时间:2024/04/29 03:30

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监听到对象被监听的对象销毁

 

原创粉丝点击