java事件机制(Observer)

来源:互联网 发布:php 开源考试平台 编辑:程序博客网 时间:2024/06/08 01:28
package com.event.src;import java.util.EventObject;/** * 事件:要想成为一个事件,这个类必须继承ExentObject * @author winter */@SuppressWarnings("serial")public class NameChangeEvent extends EventObject {      /**    * 必须重写EventObject类的构造方法    * @param source    */   public NameChangeEvent(NameChangeContext source) {   super(source);   }         public NameChangeContext getNameChangeContext () {  return (NameChangeContext) super.getSource();   }}
package com.event.src;import java.util.EventListener;/** * 名字改变事件监听器:继承EventListener接口 * 读完Servlet的监听器源码后,发现监听器一般是接口。 * @author winter * */public interface NameChangeListener extends EventListener {/** * 名字事件改变后 * @param event */public void changed(NameChangeEvent event);}


package com.event.src;import java.util.ArrayList;import java.util.List;/** * 事件源 * @author winter * */public class NameChangeContext {private String name="";/** * 一个事件可以有多个事件监听器,所以这里一般用list装起事件监听器来 */private List<NameChangeListener> listeners=new ArrayList<NameChangeListener>();public String getName() {return name;}/** * 当名字改变时,响应事件 * @param name */public void setName(String name) {if(!this.name.equals(name)){this.name = name;notifies();}}/** * 注册事件 * @param listener */public void addListener(NameChangeListener listener){listeners.add(listener);}/** * 响应事件 */public void notifies(){for (NameChangeListener listener : listeners) {listener.changed(new NameChangeEvent(this));}}}
package com.event.main;import com.event.src.NameChangeContext;import com.event.src.NameChangeEvent;import com.event.src.NameChangeListener;/** * 测试 * @author winter * */public class Main {/** * @param args */public static void main(String[] args) {NameChangeContext context=new NameChangeContext();context.addListener(new NameChangeListener() {@Overridepublic void changed(NameChangeEvent event) {System.out.println("名字改变啦,改成:"+event.getNameChangeContext().getName());}});context.setName("刘敏");}}



	
				
		
原创粉丝点击